【LeetCode】62. 不同路径

SoftwareDevOps 斗灵
优质创作者: 编程框架技术领域
领域专家: 后端开发技术领域
2022-09-14 10:48:04

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

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

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

输入:m = 3, n = 7
输出:28

 

示例2:

 

输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下

示例3:

输入:m = 7, n = 3
输出:28

解题思路:

 

动态规划:

 

我们令 dp[i][j] 是到达 i, j 最多路径

动态方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]

注意,对于第一行 dp[0][j],或者第一列 dp[i][0],由于都是在边界,所以只能为 1

时间复杂度:O(m*n)O(m∗n)

空间复杂度:O(m * n)O(m∗n)

优化:因为我们每次只需要 dp[i-1][j],dp[i][j-1]

所以我们只要记录这两个数,直接看代码吧!

 

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        for (int i = 0; i < n; i++) dp[0][i] = 1;
        for (int i = 0; i < m; i++) dp[i][0] = 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];  
    }
}

 

 

...全文
28 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-数据结构与算法 发布问题, 以便更快地解决您的疑问

126

社区成员

发帖
与我相关
我的任务
社区描述
想刷题,往往三天打鱼两天晒网,没有毅力坚持下去的人。可以跟着此专栏,一天一道题,坚持就是胜利!
后端云原生前端框架 个人社区 江苏省·苏州市
社区管理员
  • SoftwareDevOps
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

“1024 程序员节|用代码,改变世界” 主题征文开启,限定勋章&丰富周边大奖等你拿!快来投稿吧~

https://bbs.csdn.net/topics/608723542

在本页面下,评论:我要报名。

 

即可参赛成功!1022~1024期间发文还能获取1024勋章!快来参与吧!第一次组织,希望各位大佬多多支持呐!

试试用AI创作助手写篇文章吧