leetcode-腐烂的橘子

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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值