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之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1269 停在原地的方案数[动态规划] HERODING的LeetCode之路

leetcode 1269 停在原地的方案数

LeetCode 1269. 停在原地的方案数 (DP)

leetcode-164周赛-1269-停在原地的方案数

leetcode1269. 停在原地的方案数简单DP

我用java刷 leetcode 1269. 停在原地的方案数