【动态规划】LeetCode-62. 不同路径

62. 不同路径。

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

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

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

示例 1:
image

输入: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

提示:

1 <= m, n <= 100
题目数据保证答案小于等于 2 * 10^9
算法分析

解题思路
dp
我们令 dp[i][j] 是到达 i, j 最多路径
动态方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]
注意,对于第一行 dp[0][j],或者第一列 dp[i][0],由于都是在边界,所以只能为 1

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

复杂性分析

时间复杂度:O(mn)
空间复杂度:O(m
n)

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 17:36:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 17:36:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 17:36:03       82 阅读
  4. Python语言-面向对象

    2024-01-27 17:36:03       91 阅读

热门阅读

  1. QT容器分类与QSet应用

    2024-01-27 17:36:03       46 阅读
  2. 使用Gin框架,快速开发高效的Go Web应用程序

    2024-01-27 17:36:03       54 阅读
  3. Springboot整合hibernate validator 全局异常处理

    2024-01-27 17:36:03       44 阅读
  4. 开发手札:Github Timeout 22

    2024-01-27 17:36:03       47 阅读
  5. Android启动流程学习笔记

    2024-01-27 17:36:03       48 阅读