代码随想录 62. 不同路径

题目
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
输入:m = 3, n = 7
输出:28
示例 2:
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向下 -> 向下
  2. 向下 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向下
    示例 3:
    输入:m = 7, n = 3
    输出:28
    示例 4:
    输入:m = 3, n = 3
    输出:6

解题思路
路径规划问题很容易想到动态规划,用dp[i][j]表示到达第[i][j]位置的路径个数,dp[i][j]可由dp[i-1][j]和dp[i][j-1]得到,即为两者之和。因为只能向下向右运动,则dp[i][0]和dp[0][j]都为1.最终返回dp[m-1][n-1],即为到达终点的所有路径个数。

代码实现

class Solution {
   
public:
    int uniquePaths(int m, int n) {
   
        if (m < 0 || n < 0) {
   
            return 0;
        }
        vector<vector<int>> dp(m+1, vector<int>(n+1,0));
        for (int i=0;i<m;i++) {
   
            dp[i][0] = 1; // 只能向下移动,所以第一列的路径数都为1
        }
        for (int j=0;j<n;j++) {
   
            dp[0][j] = 1; // 只能向右移动,所以第一行的路径数都为1
        }
        for (int i=1;i<m;i++) {
   
            for (int j=1;j<n;j++) {
   
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }
};

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 08:46:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 08:46:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 08:46:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 08:46:02       20 阅读

热门阅读

  1. 给鼠标描述符打上注释防止忘记

    2023-12-09 08:46:02       32 阅读
  2. DETR 目标检测

    2023-12-09 08:46:02       35 阅读
  3. c 语言常用的加密算法——MD5

    2023-12-09 08:46:02       42 阅读
  4. UDP群聊

    UDP群聊

    2023-12-09 08:46:02      36 阅读
  5. Jenkins安装

    2023-12-09 08:46:02       46 阅读
  6. 达梦(主备)搭建

    2023-12-09 08:46:02       29 阅读
  7. WPF(Windows Presentation Foundation)的 ToolBar控件

    2023-12-09 08:46:02       39 阅读
  8. 个人简介(非学习类笔记)

    2023-12-09 08:46:02       41 阅读
  9. Dubbo学习

    2023-12-09 08:46:02       35 阅读
  10. C++同异步极致线程池

    2023-12-09 08:46:02       42 阅读
  11. ELK架构监控MySQL慢日志

    2023-12-09 08:46:02       44 阅读