【力扣100】994.腐烂的橘子tangerine

添加链接描述

python 复制代码
class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        # 思路是bfs,使用队列控制腐烂橘子的进出,然后在while循环末位对结果进行控制
        if not grid or len(grid)==0:
            return -1
            
        def check_zeros(array):
            for row in array:
                for elem in row:
                    if elem != 0:
                        return False
            return True
        myflag=check_zeros(grid)
        if myflag:
            return 0

        que=collections.deque()
        result=0
        row=len(grid)
        col=len(grid[0])
        for i in range(row):
            for j in range(col):
                if grid[i][j]==2:
                    que.append([i,j])
                if (
                    (i-1<0 or grid[i-1][j]==0) and 
                    (j-1<0 or grid[i][j-1]==0) and 
                    (i+1>=row or grid[i+1][j]==0) and 
                    (j+1>=col or grid[i][j+1]==0) and 
                    grid[i][j]==1
                    ):
                    return -1
        if not que:
            return -1
        while que:
            size=len(que)
            result+=1
            while size:
                cur=que.popleft()
                x=cur[0]
                y=cur[1]
                if x-1>=0 and grid[x-1][y]==1:
                    que.append([x-1,y])
                    grid[x-1][y]=2
                if y-1>=0 and grid[x][y-1]==1:
                    que.append([x,y-1])
                    grid[x][y-1]=2
                if x+1<row and grid[x+1][y]==1:
                    que.append([x+1,y])
                    grid[x+1][y]=2
                if y+1<col and grid[x][y+1]==1:
                    que.append([x,y+1])
                    grid[x][y+1]=2
                size-=1
        return result-1

思路:

  1. bfs,使用队列维护,使用reslut控制结果
  2. 我自己写的这个打了很多补丁,然后还是有很多条件没有考虑到,但大体上bfs的思路是正确的

官方题解(也是bfs,而且多源我也考虑到了):

python 复制代码
class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        R, C = len(grid), len(grid[0])

        # queue - all starting cells with rotting oranges
        queue = collections.deque()
        for r, row in enumerate(grid):
            for c, val in enumerate(row):
                if val == 2:
                    queue.append((r, c, 0))

        def neighbors(r, c) -> (int, int):
            for nr, nc in ((r - 1, c), (r, c - 1), (r + 1, c), (r, c + 1)):
                if 0 <= nr < R and 0 <= nc < C:
                    yield nr, nc

        d = 0
        while queue:
            r, c, d = queue.popleft()
            for nr, nc in neighbors(r, c):
                if grid[nr][nc] == 1:
                    grid[nr][nc] = 2
                    queue.append((nr, nc, d + 1))

        if any(1 in row for row in grid):
            return -1
        return d
相关推荐
随便发挥6 小时前
Leetcode 剑指 Offer II 186. 文物朝代判断
leetcode
6Hzlia6 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
Y幽谷客12 小时前
Python加载本地大模型(Qwen3.5 8B)
python·大模型
伞伞悦读13 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
有点。13 小时前
C++03阶段练习(练习题)
数据结构·算法·图论
线上放牧人13 小时前
Windows删除图标缓存
windows·python·pyqt
qq_54702617913 小时前
Python 变量和简单数据类型
python
周末也要写八哥14 小时前
经典算法实例:游戏中弱角色的数量(二)
算法
是Yu欸14 小时前
鸿蒙PC移植:2048 从网页小游戏到 AI 桌面应用
大数据·人工智能·算法·数据挖掘·openharmony·codex
鹿角片ljp14 小时前
KV Cache 解析
java·算法