第一次做的時候,通過遍歷grid來統計每一次好橘子的個數,由值為2的節點開始向外感染。如果好橘子的個數在t1和t2時間內一樣,代表好橘子無法被遍歷到,return -1。
由於這種方法需要不斷地遍歷整個grid(統計好橘子數量),所以時間上損耗較大。
class
solution
(object)
: def orangesrotting
(self, grid)
: #統計好橘子個數
good_orange = self.
calculate_good_orange
(grid)
time =
0 temp =
0while good_orange >0:
time +=
1for i in
range
(len
(grid)):
for j in
range
(len
(grid[i]))
:if grid[i]
[j]== time +1:
if i >=
1 and grid[i-1]
[j]==
1: grid[i-1]
[j]= time +
2if j >=
1 and grid[i]
[j-1]==
1:grid[i]
[j-1
]= time +
2if i +
1<
len(grid) and grid[i+1]
[j]==
1: grid[i+1]
[j]= time +
2if j +
1<
len(grid[i]
) and grid[i]
[j+1]==
1: grid[i]
[j+1
]= time +
2if good_orange == self.
calculate_good_orange
(grid)
:return-1
good_orange = self.
calculate_good_orange
(grid)
return time
def calculate_good_orange
(self, grid)
: res =
0for i in grid:
for j in i:
if j ==1:
res +=
1return res
第二次做,通過bfs的層序遍歷來統計,效能提高不少。
class
solution
(object)
: def orangesrotting
(self, grid)
:"""
:type grid: list[list[int]
]:rtype: int
"""'''
本質上是通過bfs,記錄層數
'''m =
len(grid)
n =len(grid[0]
) good_orange =
0 queue =
for i in
range
(m):
for j in
range
(n):
if grid[i]
[j]==
2: queue.
((i,j)
) #相當於腐爛橘子是初始點,放入queue
if grid[i]
[j]==
1: good_orange +=
1 layer =
0while good_orange >
0 and len
(queue)
>0:
layer +=
1for i in
range
(len
(queue)):
curr = queue.
pop(0)
if curr[0]
-1>=
0 and grid[curr[0]
-1][curr[1]
]==1:
grid[curr[0]
-1][curr[1]
]=2 queue.
((curr[0]
-1, curr[1]
))good_orange -=
1if curr[1]
-1>=
0 and grid[curr[0]
][curr[1]
-1]==
1:grid[curr[0]
][curr[1]
-1]=
2 queue.
((curr[0]
, curr[1]
-1))
good_orange -=
1if curr[0]
+1< m and grid[curr[0]
+1][curr[1]
]==1:
grid[curr[0]
+1][curr[1]
]=2 queue.
((curr[0]
+1, curr[1]
))good_orange -=
1if curr[1]
+1< n and grid[curr[0]
][curr[1]
+1]==
1:grid[curr[0]
][curr[1]
+1]=
2 queue.
((curr[0]
, curr[1]
+1))
good_orange -=
1if good_orange ==0:
return layer
else
:return
-1
Leetcode 994 腐爛的橘子
在給定的網格中,每個單元格可以有以下三個值之一 值 0 代表空單元格 值 1 代表新鮮橘子 值 2 代表腐爛的橘子。每分鐘,任何與腐爛的橘子 在 4 個正方向上 相鄰的新鮮橘子都會腐爛。返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1。示例 1 輸入 2,1,1 1,1,...
LeetCode994腐爛橘子問題
1 題目描述 在給定的網格中,每個單元格可以有以下三個值之一 值 0 代表空單元格 值 1 代表新鮮橘子 值 2 代表腐爛的橘子。每分鐘,任何與腐爛的橘子 在 4 個正方向上 相鄰的新鮮橘子都會腐爛。返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1。示例 1 輸入 2,1...
LeetCode 994 腐爛的橘子
題目鏈結 bfs 廣度優先遍歷 這道題跟leetcode200很像,可以參考下它的bfs方法 class solution int dy public intorangesrotting int grid int count 0 int m grid.length,n grid 0 length l...