Skip to content

题目描述

从 m×n 网格的左上角走到右下角,每次只能向右或向下,有多少条不同路径。

解题思路

dp[i][j] = 到达 (i,j) 的路径数 = dp[i-1][j] + dp[i][j-1]。初始条件:第一行和第一列都只有 1 条路径。

二维 DP 的标准入门题。空间优化技巧:dp[j] 在更新前存储的是 dp[i-1][j](上方),dp[j-1] 已经更新为 dp[i][j-1](左方),所以 dp[j] += dp[j-1] 等价于 dp[i][j] = dp[i-1][j] + dp[i][j-1]

代码实现

python
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [1] * n  # 空间优化为一维
        for _ in range(1, m):
            for j in range(1, n):
                dp[j] += dp[j - 1]
        return dp[-1]

复杂度分析

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

关键要点

  • 二维网格 DP,dp[i][j] = dp[i-1][j] + dp[i][j-1],空间优化为一维。

基于 VitePress 构建