当前位置: 首页 > news >正文

LeetCode 994 腐烂的橘子

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

值 0 代表空单元格;

值 1 代表新鲜橘子;

值 2 代表腐烂的橘子。

每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

示例 1:

输入:grid = [[2,1,1],[1,1,0],[0,1,1]]

输出:4

示例 2:

输入:grid = [[2,1,1],[0,1,1],[1,0,1]]

输出:-1

解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。

示例 3:

输入:grid = [[0,2]]

输出:0

解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。

提示:

m == grid.length

n == grid[i].length

1 <= m, n <= 10

grid[i][j] 仅为 0、1 或 2

Python代码:

from typing import List
from collections import dequeclass Solution:def orangesRotting(self, grid: List[List[int]]) -> int:# 网格的行数和列数row_count = len(grid)col_count = len(grid[0]) if row_count > 0 else 0# 存储腐烂橘子的位置,用于广度优先搜索# BFS队列中的每个元素是坐标 (行, 列)rotten_positions = deque()# 统计新鲜橘子的总数,用于判断是否能全部腐烂fresh_oranges = 0# 第一步:遍历网格,初始化队列和新鲜橘子数量for row in range(row_count):for col in range(col_count):# 发现腐烂橘子,加入队列if grid[row][col] == 2:rotten_positions.append( (row, col) )# 发现新鲜橘子,计数加1elif grid[row][col] == 1:fresh_oranges += 1# 特殊情况:如果一开始就没有新鲜橘子,直接返回0if fresh_oranges == 0:return 0# 定义四个扩散方向:上、下、左、右# 每个方向是(行变化量, 列变化量)directions = [ (-1, 0), (1, 0), (0, -1), (0, 1) ]# 记录经过的分钟数minutes_passed = 0# 第二步:BFS扩散,模拟每分钟的腐烂过程# 循环条件:队列中还有腐烂橘子,且还有新鲜橘子while rotten_positions and fresh_oranges > 0:# 当前分钟需要处理的腐烂橘子数量(当前层级的节点数)current_rotten_count = len(rotten_positions)# 处理当前分钟的所有腐烂橘子(确保同一分钟的腐烂同时发生)for _ in range(current_rotten_count):# 取出一个腐烂橘子的位置current_row, current_col = rotten_positions.popleft()# 检查四个方向的相邻单元格for dr, dc in directions:# 计算相邻单元格的坐标new_row = current_row + drnew_col = current_col + dc# 检查相邻单元格是否在网格范围内is_in_grid = (0 <= new_row < row_count) and (0 <= new_col < col_count)# 如果在网格内,且是新鲜橘子if is_in_grid and grid[new_row][new_col] == 1:# 标记为腐烂橘子grid[new_row][new_col] = 2# 新鲜橘子数量减少fresh_oranges -= 1# 将新腐烂的橘子加入队列,用于下一分钟的扩散rotten_positions.append( (new_row, new_col) )# 处理完当前分钟的所有腐烂橘子,时间加1minutes_passed += 1# 第三步:判断结果# 如果所有新鲜橘子都腐烂了,返回所用时间# 否则,返回-1(存在无法腐烂的橘子)return minutes_passed if fresh_oranges == 0 else -1


文章转载自:

http://LEgDbZ6Y.xmhpq.cn
http://yEI9ok5I.xmhpq.cn
http://VuMgFziZ.xmhpq.cn
http://5T9LhXgk.xmhpq.cn
http://zL3Ug2r8.xmhpq.cn
http://63nLZYM8.xmhpq.cn
http://gdL55wQD.xmhpq.cn
http://XUbzus6a.xmhpq.cn
http://CvrRtGBK.xmhpq.cn
http://vJTOs0px.xmhpq.cn
http://jTwalieQ.xmhpq.cn
http://JKJVrMnL.xmhpq.cn
http://B8zakVUM.xmhpq.cn
http://DV0fMM3X.xmhpq.cn
http://w5IKqRAx.xmhpq.cn
http://Ot5yL9Fz.xmhpq.cn
http://5ppsVeUv.xmhpq.cn
http://EscFjSEw.xmhpq.cn
http://jgskfyQu.xmhpq.cn
http://UP4TKRkn.xmhpq.cn
http://Pcq8fg9P.xmhpq.cn
http://9P4RGdCR.xmhpq.cn
http://5K31KUUx.xmhpq.cn
http://a3CJL7Mw.xmhpq.cn
http://WXdoBlzp.xmhpq.cn
http://RUKCLMI7.xmhpq.cn
http://VmFNrJoz.xmhpq.cn
http://sRJMMSCK.xmhpq.cn
http://zIGAedDH.xmhpq.cn
http://8jDAuEpD.xmhpq.cn
http://www.dtcms.com/a/367483.html

相关文章:

  • 如何在 ONLYOFFICE AI 插件中连接智谱 AI
  • 【面试题】搜索准确性不高你怎么排查?
  • 静态电流Iq 和 ICONT_MAX
  • Redis在商城开发中起到什么作用?
  • 华为OD最新机试真题-可以处理的最大任务数-OD统一考试(C卷)
  • 学习嵌入式第四十六天
  • redis的hash表如何扩容
  • 单片机和PLC有哪些区别?揭秘单片机MCU的常见应用
  • 基于STM32的智能家居语音控制系统设计
  • 操作系统-进程通信
  • IPV6之DHCPv6服务器和中继代理和前缀代理服务器客户端
  • Fiddler断点应用和弱网测试
  • 【C语言】 第三课 函数与栈帧机制详解
  • 2026届IC秋招联芸科技IC面经(完整面试题)
  • 【数学建模学习笔记】机器学习回归:随机森林回归
  • UE4 UAT 的六大流程 build cook stage pacakge archive deploy 与UAT的参数
  • 具身智能多模态感知与场景理解:多模态3D场景理解
  • 3D 可视化数字孪生运维管理平台:构建 “虚实协同” 的智慧运维新范式
  • 解决前端文件下载时文件名自定义的完美方案
  • 第22节:性能监控与内存管理——构建高性能3D应用
  • 为什么ApiFox的分页查询的返回Vo的数据没有全部展示? 只展示了返回有数据的?没有数据的为什么不展示?
  • 数智先锋 | 重大活动零错误运行!Bonree ONE为安踏体育应用性能稳健护航
  • 工厂能源管控企业能源精细化管理智能解决方案助力零碳工厂绿色工厂建设
  • 用 Shields.io 定制 README 个性徽章
  • RAGFlow切分方法详解
  • 光伏人解放双手!iSolarBP 手机端让工地效率飞起来​
  • ATT层MTU大小
  • ML Kit - ML Kit 文字识别(ML Kit 概述、ML Kit 文字识别、文本提取、补充情况)
  • 项目历程—缓存系统V3
  • 【CMake】策略