乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。問總共有多少條不同的路徑?
class
solution
:def
uniquepaths
(self, m:
int, n:
int)
->
int:
dp =[[
1]* n]+[
[1]+
[0]*
(n -1)
for _ in
range
(m-1)]
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
]
現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?class
solution
:def
uniquepaths
(self, m:
int, n:
int)
->
int:
current =[1
]* n
for i in
range(1
, m)
:for j in
range(1
, n)
: current[j]
+= current[j-1]
return current[-1
]
思路:由於要先給出乙個首行首列的初始值,但不能確定是否有障礙物,需要挨個進行判斷,太繁瑣惹。。。
新增乙個虛擬的邊界
(首行首列),則原始的首行首列可以類似網格中其他的行列操作
最後返回的是dp[-2]
直接解法lclass
solution
:def
uniquepathswithobstacles
(self, obstaclegrid: list[list[
int]])
->
int:
ifnot obstaclegrid:
return
0 m =
len(obstaclegrid)
n =len(obstaclegrid[0]
) dp =[1
]+[0
]* n
for i in
range(0
, m)
:for j in
range(0
, n)
: dp[j]=0
if obstaclegrid[i]
[j]else dp[j]
+ dp[j -1]
return dp[-2
]
挨個進行判斷,原地更新,空間複雜度低,但迴圈次數變多了
class
solution
:def
uniquepathswithobstacles
(self, obstaclegrid: list[list[
int]])
->
int:
ifnot obstaclegrid:
return
0 m =
len(obstaclegrid)
n =len(obstaclegrid[0]
)if obstaclegrid[0]
[0]==
1:return
0 obstaclegrid[0]
[0]=
1for i in
range(1
, m)
: obstaclegrid[i][0
]=int(obstaclegrid[i][0
]!=1and obstaclegrid[i -1]
[0]==
1)for j in
range(1
, n)
: obstaclegrid[0]
[j]=
int(obstaclegrid[0]
[j]!=
1and obstaclegrid[0]
[j -1]
==1)for i in
range(1
, m)
:for j in
range(1
, n)
: obstaclegrid[i]
[j]=
0if obstaclegrid[i]
[j]==
1else obstaclegrid[i -1]
[j]+ obstaclegrid[i]
[j -1]
return obstaclegrid[-1
][-1
]
Leecode 62 63 不同路徑
i 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?class solution for int j 1 j0 j 1 for int i 1 if...
LeetCode 62 63 不同路徑
劍指offer contentsleetcode 63 不同路徑ii 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的...
62 不同路徑63 不同路徑 II
62.不同路徑 動態規劃清晰步驟 1.定義dp陣列 2.初始化 3.迴圈填充 4.返回結果 class solution 4.返回結果 return dp m 1 n 1 動態規劃寫法2 內部解決初始化問題 class solution2 else if i 0 j 0 else if i 0 j ...