leetcode 994 腐爛的橘子

2021-10-03 13:02:14 字數 1820 閱讀 4188

在給定的網格中,每個單元格可以有以下三個值之一:

值 0 代表空單元格;

值 1 代表新鮮橘子;

值 2 代表腐爛的橘子。

每分鐘,任何與腐爛的橘子(在 4 個正方向上)相鄰的新鮮橘子都會腐爛。

返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 -1。

廣度優先遍歷(bfs),初始狀態的爛橘子當作根節點,依次處理每乙個根節點鄰居的新鮮橘子,使其腐爛並記為下一層節點,直到沒有新鮮橘子,返回所處理的層數。

class

solution

:def

orangesrotting

(self, grid: list[list[

int]])

->

int:

h, w =

len(grid)

,len

(grid[0]

) cnt =

0# 記錄新鮮橘子的數量

queue =

for i in

range

(h):

for j in

range

(w):

if grid[i]

[j]==2:

# 初始狀態的爛橘子位置存入佇列

(i,j)

)elif grid[i]

[j]==1:

# 初始狀態的新鮮橘子數量

cnt +=

1min=0

# 時間記錄

while cnt >

0and

len(queue)

>0:

min+=

1for i in

range

(len

(queue)):

x, y = queue.pop(0)

# 依次處理該時刻的爛橘子,已處理的清理掉

if x >

0and grid[x-1]

[y]==1:

# 左鄰點是否有新鮮橘子

grid[x-1]

[y]=

2 cnt -=

1(x-

1,y)

)# 變爛的橘子加入佇列,在下一分鐘內處理

if y >

0and grid[x]

[y-1]==

1:# 上鄰

grid[x]

[y-1]=

2 cnt -=

1(x,y-1)

)if x < h-

1and grid[x+1]

[y]==1:

# 右鄰

grid[x+1]

[y]=

2 cnt -=

1(x+

1,y)

)if y < w-

1and grid[x]

[y+1]==

1:# 下鄰

grid[x]

[y+1]=

2 cnt -=

1(x,y+1)

)if cnt <=0:

# 當沒有新鮮橘子時返回

return

minelse

:return-1

# 當完成搜尋後仍有新鮮橘子時返回

Leetcode 994 腐爛的橘子

在給定的網格中,每個單元格可以有以下三個值之一 值 0 代表空單元格 值 1 代表新鮮橘子 值 2 代表腐爛的橘子。每分鐘,任何與腐爛的橘子 在 4 個正方向上 相鄰的新鮮橘子都會腐爛。返回直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 1。示例 1 輸入 2,1,1 1,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...

leetcode994腐爛的橘子

深度優先遍歷問題,需要利用佇列來訪問需要遍歷的節點,同時為了維護遍歷深度,需要維護乙個字典來訪問遍歷深度 public intorangesrotting int grid int dc int r grid.length int c grid 0 length int ans 0 queue qu...