【力扣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
相关推荐
归去_来兮4 小时前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
Flittly6 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
python·agent
千寻girling11 小时前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试
千寻girling11 小时前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱14 小时前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
databook14 小时前
探索视觉的边界:用 Manim 重现有趣的知觉错觉
python·动效
明月_清风15 小时前
Python 性能微观世界:列表推导式 vs for 循环
后端·python
明月_清风15 小时前
Python 性能翻身仗:从 O(n) 到 O(1) 的工程实践
后端·python
helloweilei1 天前
python 抽象基类
python
用户8356290780511 天前
Python 实现 PPT 转 HTML
后端·python