leetcode 1269. 停在原地的方案数(dp)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 1269. 停在原地的方案数(dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
示例 1:
輸入:steps = 3, arrLen = 2
輸出:4
解釋:3 步后,總共有 4 種不同的方法可以停在索引 0 處。
向右,向左,不動
不動,向右,向左
向右,不動,向左
不動,不動,不動
示例 2:
輸入:steps = 2, arrLen = 4
輸出:2
解釋:2 步后,總共有 2 種不同的方法可以停在索引 0 處。
向右,向左
不動,不動
解題思路
數組含義
dp[i][j]代表第i步走到第j個下標的方法數量
狀態轉移
dp[i][j]=dp[i-1][j];if(j-1>=0)dp[i][j]=(dp[i][j]+dp[i-1][j-1])%m;if(j+1<=maxL) dp[i][j]=(dp[i][j]+dp[i-1][j+1])%m;要達到第i步走到第j個下標這個狀態,要從上一步(i-1)的三種位置(j+1,j-1,j)轉移而來
初始化
剛開始時在第0個下標,步數是0,所以方法數只有1(dp[0][0]=1)
代碼
class Solution {public int numWays(int steps, int arrLen) {int m=(int)1e9+7;int maxL= Math.min(arrLen-1,steps/2);int[][] dp = new int[steps + 1][maxL+1];;for (int i=1;i<=steps;i++){for (int j=0;j<=maxL;j++){dp[i][j]=dp[i-1][j];if(j-1>=0)dp[i][j]=(dp[i][j]+dp[i-1][j-1])%m;if(j+1<=maxL) dp[i][j]=(dp[i][j]+dp[i-1][j+1])%m;}}return dp[steps][0];} }總結
以上是生活随笔為你收集整理的leetcode 1269. 停在原地的方案数(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到拔牙齿掉了是什么意思
- 下一篇: spring里面 @Controller