乙個機械人位於乙個 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題類似。只不過要多加乙個判斷。判斷是否是障礙物,如果是障礙物就跳過。
class
solution
:def
uniquepathswithobstacles
(self, obstaclegrid)
:"""
:type obstaclegrid: list[list[int]]
:rtype: int
"""m,n =
len(obstaclegrid)
,len
(obstaclegrid[0]
) res =[[
0]*n for i in
range
(m)]
#與一點在一行或者一列。
for i in
range
(m):
if obstaclegrid[i][0
]==1:
#判斷是障礙物就跳過不操作
break
res[i][0
]=1#不是障礙物就複製1
for j in
range
(n):
if obstaclegrid[0]
[j]==1:
break
res[0]
[j]=
1for i in
range(1
,m):
for j in
range(1
,n):
if obstaclegrid[i]
[j]==0:
# 如果不是障礙物就進行迭代操作
res[i]
[j]= res[i-1]
[j]+ res[i]
[j-1
]return res[m-1]
[n-1
]
LeetCode63 不同路徑
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...
LeetCode 63 不同路徑
看到這個題目的時候想到的是通過深度優先搜尋演算法進行求解,找到每一條能夠到達finish的路徑,並計數 1,最後得出的計數值即為解。程式設計後提交對於部分測試用例超時,程式如下 class solution if x 1 n 1 if y 1 m 1 int uniquepathswithobsta...
Leetcode 63 不同路徑
描述 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說...