LeetCode題解 994 腐爛的橘子

2021-10-03 12:26:59 字數 3155 閱讀 1395

第一次做的時候,通過遍歷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...