Leetcode 63 不同路徑II

2021-10-10 19:12:03 字數 2344 閱讀 7558

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

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

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

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

示例 1:

輸入:obstaclegrid = [[0,0,0],[0,1,0],[0,0,0]]

輸出:2

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

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

向右 -> 向右 -> 向下 -> 向下

向下 -> 向下 -> 向右 -> 向右

示例 2:

輸入:obstaclegrid = [[0,1],[0,0]]

輸出:1

動態規劃

陣列中的障礙物設定為 -1 ,對於下邊緣元素和右邊緣元素,賦值為右邊元素和下邊元素。對於其他位置元素,當下邊元素和右邊元素存在 -1 時,等於不等於 -1 的元素,否則等於下邊元素 和右邊元素之和。 若 (0,0) 元素 不等於 -1 ,返回其值,否則返回0。

class

solution

:def

uniquepathswithobstacles

(self, obstaclegrid: list[list[

int]])

->

int:

m, n =

len(obstaclegrid)

,len

(obstaclegrid[0]

)if m ==

1or n ==1:

return0if

1in[obstaclegrid[i]

[j]for j in

range

(n)for i in

range

(m)]

else

1for i in

range

(m):

for j in

range

(n):

if obstaclegrid[i]

[j]==1:

obstaclegrid[i]

[j]=-1

if obstaclegrid[-1

][-1

]==-1

:return

0else

: obstaclegrid[-1

][-1

]=1for i in

range

(m -1,

-1,-

1):for j in

range

(n -1,

-1,-

1):if i == m -

1and j == n -

1or obstaclegrid[i]

[j]==-1

:continue

if i +

1== m:

obstaclegrid[i]

[j]= obstaclegrid[i]

[j +1]

elif j +

1== n:

obstaclegrid[i]

[j]= obstaclegrid[i +1]

[j]elif obstaclegrid[i]

[j +1]

==-1or obstaclegrid[i +1]

[j]==-1

: obstaclegrid[i]

[j]=

max(obstaclegrid[i +1]

[j], obstaclegrid[i]

[j +1]

)else

: obstaclegrid[i]

[j]= obstaclegrid[i +1]

[j]+ obstaclegrid[i]

[j +1]

return obstaclegrid[0]

[0]if obstaclegrid[0]

[0]!=

-1else

0

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 來表示。說...