乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
示例 1
:輸入: m =
3, n =
2輸出:
3解釋:
從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -
> 向右 -
> 向下
2. 向右 -
> 向下 -
> 向右
3. 向下 -
> 向右 -
> 向右
示例 2
:輸入: m =
7, n =
3輸出:28
1<= m, n <=
100題目資料保證答案小於等於 2*10
^9
#這裡的dp[i][j]代表到這裡的有多少條路徑
class
solution
:def
uniquepaths
(self, m:
int, n:
int)
->
int:
# 初始化為1,避免多餘的賦值,外層不使用*,否則淺拷貝內層可能會在賦值時候出現問題
dp =[[
1]*n for _ in
range
(m)]
for i in
range(1
, m)
:for j in
range(1
, n)
: dp[i]
[j]= dp[i]
[j -1]
+ dp[i -1]
[j]return dp[-1
][-1
]
"""排列組合,一定會有m+n-2次移動,其中向右m-1次移動,
向下n-1次移動,所以就是在(m+n-2)中選取(m-1)次移動出來
即c(m-1)(m+n-2)"""
class
solution
:def
uniquepaths
(self, m:
int, n:
int)
->
int:
return
int(math.factorial(m+n-2)
/math.factorial(m-1)
/math.factorial(n-1)
)
不同路徑(LeetCode)
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 ...
不同路徑(leetcode)
題目 物體怎樣從左上角移動到右下角,其中1表示有障礙,不能行走。思路 知道整個方框的行和列。對第一行和第一列進行填充1,當碰到1 障礙 填充0。本題可以被視為乙個動態規劃的問題,從上到下,從左到右,其中到達乙個終點的路徑總是左邊路徑 上面路徑。即 d p i j dp i 1 j dp i j 1 ...
leetcode不同路徑
1.深度優先搜尋 從finish點開始,往回走,每次是往上走,往右走,當回到0,0點時,路徑數量加1 如下 class solution void dfs int m,int n,int r,int c 但是這種方法可能會超時 2.利用數學公式 地圖矩陣為m行,n列,從左上角到右下角一共需要走m n...