LeetCode 62. 不同路径的 Python3 实现如下,包含动态规划和组合数学两种解法。


解法一:动态规划(经典)

用 dp[i][j] 表示到达位置 (i, j) 的路径数。由于只能向右或向下,所以 dp[i][j] = dp[i-1][j] + dp[i][j-1]。第一行和第一列只有一种走法,初始化为 1。可优化为一维数组。

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        # dp[j] 表示当前行第 j 列的路径数
        dp = [1] * n  # 第一行全是 1
        
        for i in range(1, m):
            for j in range(1, n):
                dp[j] += dp[j - 1]
        
        return dp[-1]

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


解法二:组合数学(最优)

机器人总共需要走 m + n - 2 步,其中向下 m - 1 步,向右 n - 1 步。因此路径总数就是从 m + n - 2 步中选择 m - 1 步向下(或 n - 1 步向右)的组合数:
C(m + n - 2, m - 1)

import math

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        # 计算组合数 C(m+n-2, m-1)
        return math.comb(m + n - 2, m - 1)

· 时间复杂度:O(min(m, n))(math.comb 内部高效实现)
· 空间复杂度:O(1)


选择 DP 解法易于理解,组合数学解法效率更高。实际面试中可根据需要展示。
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐