Leetcode Link: 62. 不同路径 - 力扣(LeetCode)

题目

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

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

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

解法一

思路:数学思路

题解

解法二

思路:动态规划,思路和爬楼梯是一样的,只不过这个是二维的

由于该题只能左走一步或者右走一步,因此任意位置上的组合等于上面的位置组合数量加上左边的位置组合数量,即(未考虑边界条件) 显然,对于或者,即第一行或者第一列,只能一直走到该位置,所以这些位置的dp值为1。

自下向上 (未压缩)

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [[1 for _ in range(n+1)]  for _ in range(m+1)]
        # 第一行第一列其实知道,可以认为是base case
        for i in range(2, m+1):
            for j in range(2, n+1):
                dp[i][j] = dp[i-1][j] + dp[i][j-1]
        
        return dp[m][n]

自下向上(压缩)

启发和联系