994. Rotting Oranges
https://leetcode.com/problems/rotting-oranges/description/
solution
step 1:统计新鲜水果数据,腐烂水果数据加入队列
step 2:腐烂水果BFS,更新队列,新鲜水果数据,需要的结果数据
class Solution:
def orangesRotting(self, grid: List[List[int]]) -> int:
m = len(grid)
n = len(grid[0])
queue = collections.deque()
num_fresh = 0
for i in range(m):
for j in range(n):
if grid[i][j] == 2:
queue.append((i, j))
elif grid[i][j] == 1:
num_fresh += 1
if num_fresh == 0: # 也针对 [[0]]场景
return 0
step = -1 # 初始化
while queue:
step += 1
for _ in range(len(queue)):
x, y = queue.popleft()
for dx, dy in [[1, 0], [0, 1], [-1, 0], [0, -1]]:
new_x = x + dx
new_y = y + dy
if 0 <= new_x < m and 0 <= new_y < n and grid[new_x][new_y] == 1:
queue.append((new_x, new_y))
grid[new_x][new_y] = 2 # 这里为什么要在new这里更新, 因为初始的2不在num_fresh里
num_fresh -= 1
return step if num_fresh == 0 else -1时间复杂度:O() 空间复杂度:O()
follow up
Last updated