leetcode 994.腐烂的橘子 python
时间: 2023-10-19 09:34:49 浏览: 71
你好!对于LeetCode上的问题994.腐烂的橘子,你可以使用Python来解决。下面是一个示例代码:
```python
from collections import deque
def orangesRotting(grid):
# 记录网格的行数和列数
row, col = len(grid), len(grid[0])
# 定义四个方向:上、下、左、右
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
# 使用队列来保存腐烂的橘子的位置
queue = deque()
# 记录新鲜橘子的数量
fresh_count = 0
# 遍历整个网格,初始化队列和新鲜橘子的数量
for i in range(row):
for j in range(col):
if grid[i][j] == 2: # 腐烂的橘子
queue.append((i, j))
elif grid[i][j] == 1: # 新鲜橘子
fresh_count += 1
# 如果新鲜橘子的数量为0,直接返回0
if fresh_count == 0:
return 0
# 初始化分钟数
minutes = 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 < row and 0 <= ny < col and grid[nx][ny] == 1:
# 将新鲜橘子变为腐烂状态
grid[nx][ny] = 2
# 将新鲜橘子的位置加入队列
queue.append((nx, ny))
# 新鲜橘子的数量减1
fresh_count -= 1
# 如果当前分钟数下,没有新鲜橘子了,结束循环
if fresh_count == 0:
break
# 每遍历完一层,分钟数加1
minutes += 1
# 如果最后还有新鲜橘子,返回-1,否则返回分钟数
return -1 if fresh_count > 0 else minutes
```
你可以将给定的网格作为参数传递给`orangesRotting`函数来测试它。请注意,该代码使用了BFS算法来遍历橘子,并计算腐烂的分钟数。希望能对你有所帮助!如果有任何疑问,请随时问我。