設想有個機械人坐在乙個網格的左上角,網格 r 行 c 列。機械人只能向下或向右移動,但不能走到一些被禁止的網格(有障礙物)。設計一種演算法,尋找機械人從左上角移動到右下角的路徑。網格中的障礙物和空位置分別用 1 和 0 來表示。
返回一條可行的路徑,路徑由經過的網格的行號和列號組成。左上角為 0 行 0 列。如果沒有可行的路徑,返回空陣列。
示例 1
:輸入:[[
0,0,
0],[
0,1,
0],[
0,0,
0]]輸出:[[
0,0]
,[0,
1],[
0,2]
,[1,
2],[
2,2]
]解釋:
輸入中標粗的位置即為輸出表示的路徑,即
0行0列(左上角) -
>
0行1列 -
>
0行2列 -
>
1行2列 -
>
2行2列(右下角)
說明:r 和 c 的值均不超過 100。
思路:
1、判斷不能到達的點的條件
2、用陣列存放該點是否可以到達
3、從終點倒推路徑再翻轉
class
solution
:def
pathwithobstacles
(self, obstaclegrid: list[list[
int]])
-> list[list[
int]]:
ans =
#行數和列數
m =len(obstaclegrid)
n =len(obstaclegrid[0]
)#如果行或列為0或起點或者終點是障礙物,直接返回ans
if m ==
0or n ==0:
return ans
if obstaclegrid[0]
[0]or obstaclegrid[m-1]
[n-1]:
return ans
#初始化陣列,1為可到達,0為不可到達
mn =[[
1for _ in
range
(n)]
for _ in
range
(m)]
#更新首行點是否能到達
for i in
range(1
,n):
if obstaclegrid[0]
[i]==1:
mn[0]
[i]=
0else
: mn[0]
[i]= mn[0]
[i-1
]#更新首列點是否能到達
for i in
range(1
,m):
if obstaclegrid[i][0
]==1:
mn[i][0
]=0else
: mn[i][0
]= mn[i-1]
[0]#更新中間的點
for i in
range(1
,m):
for j in
range(1
,n):
if obstaclegrid[i]
[j]==1:
mn[i]
[j]=
0else
: mn[i]
[j]=
max(mn[i-1]
[j],mn[i]
[j-1])
if mn[-1
][-1
]==0:
return ans
#倒推路徑
i = m-
1 j = n-
1while i or j:
[i,j]
)if j ==0:
i -=
1elif i ==0:
j -=
1else
:if mn[i-1]
[j]>=mn[i]
[j-1]:
i -=
1else
: j -=1[
0,0]
) ans.reverse(
)return ans
面試題 08 02 迷路的機械人
設想有個機械人坐在乙個網格的左上角,網格 r 行 c 列。機械人只能向下或向右移動,但不能走到一些被禁止的網格 有障礙物 設計一種演算法,尋找機械人從左上角移動到右下角的路徑。具體python 如下 class solution def pathwithobstacles self,obstacle...
機場迷路不用怕,Spencer機械人來幫你
解決機場迷路的小妙招我有spencer。通常在陌生的大型機場人們會很容易迷失方向,無論是取票的地方 辦理託運的地方或者安檢及其他地方,偌大的機場都會讓人們無助甚至怕錯過航班感到抓狂。工作人員的指示也總是雲裡霧裡讓人琢磨不明白。不過如果有人能指引你正確的地方去到你想去的方位,最好是他們真的可以帶你去,...
好色機械人的豔遇 機械人豔遇 《機械人的旅行》
講述機械人 路遇開房車的 剛剛開始的時候畫風很舒服,直到到了晚上上了她的床之後。畫風速變了!這個女主角聲音超好聽。整個情節實在太流氓了,太猥瑣了!連六六君這樣的老司機都看不下去了!正片在三分五十,不謝 很抱歉,此內容已經失效了!就連六六君也無法恢復了。請欣賞其他有效的內容 當您看到這條資訊的時候,很...