LeetCode 1269 停在原地的方案数[动态规划] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1269 停在原地的方案数[动态规划] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
一道简单的二维动态规划题目,dp[i][j] 表示还剩i步,当前所处的j位置,所以我们最后返回的是dp[0][0],初始化dp[steps][0] = 1,状态转移方程,即由从上一步的不移动,往左移,往右移组成,最后简单优化一下,对没有意义的运算(0 + 0 = 0)部分直接跳出,代码如下:
class Solution {
public:
int numWays(int steps, int arrLen) {
// 定义取模的数,最大边界长度
const int num = 1000000007;
int maxLen = min(steps / 2, arrLen - 1);
// 定义动态规划数组
vector<vector<int>> dp(steps + 1, vector<int>(maxLen + 1));
dp[steps][0] = 1;
for(int i = steps - 1; i >= 0; i --) {
for(int j = 0; j <= maxLen; j ++) {
// 时间优化
if(j - 1 >= 0 && dp[i + 1][j - 1] == 0) {
break;
}
// 原地不动
dp[i][j] = (dp[i][j] + dp[i + 1][j]) % num;
if(j - 1 >= 0) {// 右移
dp[i][j] = (dp[i][j] + dp[i + 1][j - 1]) % num;
}
if(j + 1 <= maxLen) {// 左移
dp[i][j] = (dp[i][j] + dp[i + 1][j + 1]) % num;
}
}
}
return dp[0][0];
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/number-of-ways-to-stay-in-the-same-place-after-some-steps/solution/cdong-tai-gui-hua-by-heroding-0ql5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
以上是关于LeetCode 1269 停在原地的方案数[动态规划] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章