9.24 动态规划---路径问题

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

思路一:排列组合

因为机器到底右下角,向下几步,向右几步都是固定的,

比如,m=3, n=2,我们只要向下 1 步,向右 2 步就一定能到达终点。

直接计算C(m+n-2,m-1)即可。时间复杂度为O(n),空间复杂度O(1)

思路二:动态规划

1、确定状态方程

dp[i][j]表示从头开始到i、j的路径数。

2、确定状态转移方程

因为想要到达i,j其实只有两个方向,一个是从上方,一个是从左方,即i-1和j-1,两个方向的和即为目前的路径数。dp[i][j] = dp[i-1][j] + dp[i][j-1]

3、确认边界条件

需要注意边界值,当i、j到达0的时候,即为到达边界,也就只有一个方向,返回1

注意:题目中的 n 是行row,而 m 才是列column。

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(n,vector<int>(m,0));
        for(int i = 0 ; i < n ; i++)
        {
            for(int j = 0 ; j < m ; j++)
            {
                if( i == 0 || j == 0)
                    dp[i][j] = 1;
                else
                {
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
            }
        }
        return dp[n-1][m-1];
    }
};
全部评论

相关推荐

05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务