LeetCode 1269 停在原地的方案数[动态规划] HERODING的LeetCode之路
发布日期:2021-05-13 20:58:50 浏览次数:19 分类:精选文章

本文共 1263 字,大约阅读时间需要 4 分钟。

在这里插入图片描述解题思路:

一道简单的二维动态规划题目,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
> dp(steps + 1, vector
(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)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
上一篇:如何查看自己电脑CPU是64位还是32位?
下一篇:考研复试 Old_Bill[暴力遍历] HERODING的考研之路

发表评论

最新留言

很好
[***.229.124.182]2025年04月22日 11时47分45秒