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