問題描述
- 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。
- 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。
- 問總共有多少條不同的路徑?
例如,上圖是一個7 x 3 的網格。有多少可能的路徑?
說明:m 和 n 的值均不超過 100。
示例 1:
輸入: m = 3, n = 2
輸出: 3
解釋:
從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
輸入: m = 7, n = 3
輸出: 28
問題分析
因爲只能向下或者向右走,因此每種方案的向右步數和向下步數是一樣的。也就是Cn-1 m+n-2
第二種方案,採用動態規劃的方法,因爲每一個位置只有來自上方和來自左邊兩種方案,所以每一步的總共走法等於左邊和上邊的到達方法總數
代碼
數學方案
def uniquePaths(self, m: int, n: int) -> int:
return int(math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1))
動態規劃
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
cur = [1] * n
for i in range(1, m):
for j in range(1, n):
cur[j] += cur[j-1]
return cur[-1]