【力扣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
相关推荐
zhanghaha13146 分钟前
Python进阶教程:27_subprocess 模块 零基础超详细教程
开发语言·python
兄弟加油,别颓废了。7 分钟前
bugku题目
开发语言·前端·python
新网企兴8 分钟前
2026西安GEO推广选哪家?新网企兴帮您精准获客
人工智能·python
2601_9622974820 分钟前
一、Python GUI 的十字路口:免费凑活还是付费破局
python·gui·tkinter·customtkinter·bravurasdk
无限码力23 分钟前
华为非AI方向笔试真题【工厂落点最小加权路程】
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为最新笔试真题·华为笔试题库
residual_fan28 分钟前
数据缺失填补算法之CUR-Estimator
算法·数据挖掘·数据分析
万年咸鱼31 分钟前
Java BufferedInputStream 详解:原理、用法与实战
java·开发语言·python
my059233 分钟前
跳出单一信息工具局限:奥米豆构建认知与心智并行的学习范式
大数据·人工智能·python·学习
weixin1997010801634 分钟前
[特殊字符]《二手ERP × 闲鱼消息驱动架构:正向+逆向交易消息如何驱动WMS出库与回传》(附Python源码)
开发语言·python·架构
wabs66634 分钟前
关于二叉树【力扣107.二叉树的层序遍历II的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历