LC 62动态规划中等第 86 / 95 题

不同路径

Unique Paths

动态规划网格 DP组合数学
本机进度仅保存在当前浏览器

题目描述

一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为 Start),机器人每次只能向下或者向右移动一步,机器人试图达到网格的右下角(标记为 Finish),问总共有多少条不同的路径。

示例:m = 3,n = 7,输出 28。

解题思路

  1. 状态 dp[i][j]:到达格 (i, j) 的路径数,只能从上方或左方转移,dp[i][j] = dp[i-1][j] + dp[i][j-1]。
  2. 首行首列路径恒为 1;用一维滚动数组滚动更新即可,空间 O(n)。
  3. 组合数学视角:路径由 m-1 次下移与 n-1 次右移组成,答案为 C(m+n-2, m-1),可直接计算。

参考实现

查看参考实现Python · 建议先自行作答
def uniquePaths(m, n):
    # 一维滚动:dp[j] 为当前行到达第 j 列的路径数
    dp = [1] * n
    for _ in range(1, m):
        for j in range(1, n):
            dp[j] += dp[j - 1]
    return dp[n - 1]

复杂度与归属

时间复杂度O(m · n)
空间复杂度O(n)
所属分类动态规划
题源LeetCode 62

关联教程

返回题图鉴