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...