62 63 不同路徑

2021-10-07 11:10:21 字數 2723 閱讀 7631

乙個機械人位於乙個 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]

class

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

]

直接解法l

挨個進行判斷,原地更新,空間複雜度低,但迴圈次數變多了

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 ...