63 不同路徑 II

2021-09-22 16:31:55 字數 2994 閱讀 9126

dfs深度優先

超出時間限制

class

solution

:def

uniquepathswithobstacles

(self, obstaclegrid: list[list[

int]])

->

int:

if obstaclegrid ==

:return

0if obstaclegrid[0]

[0]==

1:return

0

m =len(obstaclegrid)

n =len(obstaclegrid[0]

)if obstaclegrid[m -1]

[n -1]

==1:return

0

result =

list()

self.dfs(obstaclegrid,0,

0, result)

return

sum(result)

defdfs

(self, obstaclegrid, i, j, result)

:if i ==

len(obstaclegrid)-1

and j ==

len(obstaclegrid[0]

)-1:

1)elif i ==

len(obstaclegrid)-1

:if obstaclegrid[i]

[j +1]

==1:return

else

: self.dfs(obstaclegrid, i, j +

1, result)

elif j ==

len(obstaclegrid[0]

)-1:

if obstaclegrid[i +1]

[j]==1:

return

else

: self.dfs(obstaclegrid, i +

1, j, result)

else

:if obstaclegrid[i]

[j +1]

==0: self.dfs(obstaclegrid, i, j +

1, result)

if obstaclegrid[i +1]

[j]==0:

self.dfs(obstaclegrid, i +

1, j, result)

參考62

class

solution

:def

uniquepathswithobstacles

(self, obstaclegrid: list[list[

int]])

->

int:

if obstaclegrid ==

:return

0# 機械人所在位置為障礙物 無法開始

if obstaclegrid[0]

[0]==

1:return

0# 終點為障礙物 無法到達

m =len(obstaclegrid)

n =len(obstaclegrid[0]

)if obstaclegrid[m -1]

[n -1]

==1:return

0# 動態規劃

path =[[

1for i in

range

(n)]

for j in

range

(m)]

# 若第1列 有乙個方格為障礙物 那麼相當於它下面的方格都為障礙物

for i in

range(1

, m)

:if obstaclegrid[i-1]

[0]:

obstaclegrid[i][0

]=1# 同理 第一行有乙個為障礙物 右邊的方格都為障礙物

for j in

range(1

, n)

:if obstaclegrid[0]

[j -1]

: obstaclegrid[0]

[j]=

1for i in

range(1

, m)

:for j in

range(1

, n):if

(obstaclegrid[i -1]

[j]and obstaclegrid[i]

[j -1]

)or obstaclegrid[i]

[j]:

# 上 左 都無法到達 或 本身就是障礙

path[i]

[j]=

0elif obstaclegrid[i -1]

[j]:

# 上 為障礙物

path[i]

[j]= path[i]

[j -1]

elif obstaclegrid[i]

[j -1]

:# 左 為障礙物

path[i]

[j]= path[i -1]

[j]else

:# 上 左 都可到達

path[i]

[j]= path[i]

[j -1]

+ path[i -1]

[j]return path[m -1]

[n -

1]

63 不同路徑 II

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

63 不同路徑 II

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

63 不同路徑 II

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