LeetCode演算法題63 不同路徑 II解析

2021-09-09 06:56:26 字數 1745 閱讀 7047

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?

網格中的障礙物和空位置分別用 1 和 0 來表示。

說明:m 和 n 的值均不超過 100。

示例 1:

輸入:

[ [0,0,0],

[0,1,0],

[0,0,0]

]輸出: 2

解釋:3x3 網格的正中間有乙個障礙物。

從左上角到右下角一共有 2 條不同的路徑:

1. 向右 -> 向右 -> 向下 -> 向下

2. 向下 -> 向下 -> 向右 -> 向右

這個題和62題不同路徑思路都是一樣的,用動態規劃解決,多了障礙只需要在障礙處將值設為0即可。由於邊界條件變多(前面幾個格出現障礙物的情況)。所以程式整體有了一點變化,但是思路完全相同。

c++源**:

class

solution

}return dp[m-1]

[n-1];}};

python3源**:

class

solution

:def

uniquepathswithobstacles

(self, obstaclegrid)

:"""

:type obstaclegrid: list[list[int]]

:rtype: int

"""m =

len(obstaclegrid)

if m ==0:

return

0 n =

len(obstaclegrid[0]

)if n ==

0or obstaclegrid[0]

[0]==

1:return

0 dp =[[

0for i in

range

(n)]

for j in

range

(m)]

for i in

range

(m):

for j in

range

(n):

if obstaclegrid[i]

[j]:

dp[i]

[j]=

0elif i==

0and j==0:

dp[i]

[j]=1;

elif i==

0and j>0:

dp[i]

[j]= dp[i]

[j-1

]elif i>

0and j==0:

dp[i]

[j]= dp[i-1]

[j]else

: dp[i]

[j]= dp[i-1]

[j]+ dp[i]

[j-1

]return dp[m-1]

[n-1

]

LeetCode 第63題 不同路徑

不同路徑 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示...

LeetCode63題 不同路徑2

思路 這道題與leetcode62題幾乎完全相同,只是在62題的基礎上增加了 障礙 限制。因為只能向右和向下移動,那麼容易想到,如果某一處 i,j 有障礙,那麼它右側的 i,j 1 位置只能經過 i 1,j 1 到達。因此 i,j 1 的值用 i 1,j 1 代替即可。如果乙個位置 i,j 的上邊和...

LeetCode 第63題 不同路徑2

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...