class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
# 获取网格的行数和列数
rows,cols = len(grid),len(grid[0])
fresh_count = 0
queue = deque()
# 遍历整个网格,将腐烂的橘子坐标加入队列,记录新鲜橘子数量
for i in range(rows):
for j in range(cols):
if grid[i][j] == 1: # 新鲜橘子
fresh_count += 1
elif grid[i][j] == 2: # 腐烂的橘子
queue.append((i,j))
minutes = 0
directions = [(0,1),(0,-1),(1,0),(-1,0)]
# BFS遍历队列中的腐烂橘子
while queue:
size = len(queue)
for _ in range(size):
x,y = queue.popleft()
# 检查当前橘子周围的新鲜橘子
for dx,dy in directions:
nx,ny = x + dx, y + dy
# 如果新鲜橘子被腐烂,将其加入队列并减少新鲜橘子数量
if 0 <= nx < rows and 0 <= ny < cols and grid[nx][ny] == 1:
grid[nx][ny] = 2
fresh_count -= 1
queue.append((nx,ny))
# 每遍历完一层增加分钟数
if queue:
minutes += 1
# 检查新鲜橘子数量,返回对应结果
return minutes if fresh_count == 0 else -1
leetcode-腐烂的橘子
最新推荐文章于 2024-04-28 16:03:45 发布