题目

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

值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

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

解题思路

  BFS。先把所有腐烂的柿子入队,再利用层序遍历,遇到新鲜柿子就更新其对应的腐烂的时间状态,直到队列为空,其中柿子的腐烂的时间直接在 grid 数组更新。最后再判断 grid 中有无新鲜柿子,最后找到最长时间 -2 即可。

代码

class gridNode {int Raw, Col, state;public gridNode() {}public gridNode(int raw, int col, int state) {Raw = raw;Col = col;this.state = state;}
}
class Solution {public static final int[][] turn = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};public int orangesRotting(int[][] grid) {return bfs(grid);}private int bfs(int[][] grid) {Queue<gridNode> queue = new ArrayDeque<>();int lengthRaw = grid.length, lengthCol = grid[0].length;for (int i = 0; i < lengthRaw; i++) {for (int j = 0; j < lengthCol; j++) {if (grid[i][j] == 2) queue.add(new gridNode(i, j, 2));}}while (!queue.isEmpty()) {gridNode nowNode = queue.poll();for (int i = 0; i < 4; i++) {gridNode nextNode = new gridNode();nextNode.Raw = nowNode.Raw + turn[i][0];nextNode.Col = nowNode.Col + turn[i][1];if (judge(nextNode, lengthRaw, lengthCol)) continue;if (grid[nextNode.Raw][nextNode.Col] == 1) {nextNode.state = nowNode.state + 1;grid[nextNode.Raw][nextNode.Col] = nextNode.state;queue.add(nextNode);}}}int ans = 0;for (int i = 0; i < lengthRaw; i++) {for (int j = 0; j < lengthCol; j++) {if (grid[i][j] == 1) return -1;ans = Math.max(ans, grid[i][j]);}}return ans >= 2 ? ans - 2 : ans;}private boolean judge(gridNode nextNode, int lengthRaw, int lengthCol) {if (nextNode.Raw < 0 || nextNode.Raw >= lengthRaw || nextNode.Col < 0 || nextNode.Col >= lengthCol) return true;else return false;}}

  本铸币脑子没判一开始就没有柿子的情况(摸了

Leetcode 994 腐烂的柿子相关推荐

  1. leetcode 994:腐烂的橘子 java

    994. 腐烂的橘子 - 力扣(LeetCode) (leetcode-cn.com) 多源广度优先搜索,初始的所有的腐烂橘子,等价于广度优先搜索的同一层,然后对每一层进行搜索: class Solu ...

  2. LeetCode 994. 腐烂的橘子

    994. 腐烂的橘子 思路:直接bfs会出现2个腐烂的橘子在两边同时进行,这样会错误. 正确思路:每分钟变化后所有橘子状态为next_grid,直到橘子状态不改变.如果状态不变,且无新鲜的橘子则返回时 ...

  3. 【广度优先搜索】leetcode 994. 腐烂的橘子

    994. 腐烂的橘子 文章目录 题目描述 示例1: 示例2: 示例3: 提示 方法:多源广度优先搜索 解题思路 代码 复杂度分析 题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以 ...

  4. LeetCode 994. 腐烂的橘子(图的BFS)

    1. 题目 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会 ...

  5. leetcode 994 腐烂的橘子

    先给出题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都 ...

  6. leetcode 994.腐烂的橘子

    题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂 ...

  7. 图解LeetCode——994. 腐烂的橘子

    一.题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向上相 ...

  8. Leetcode 994. 腐烂的橘子(DAY 262)---- 后端面试题(2020.1.5 华为机试真题)

    文章目录 原题题目 代码实现(首刷自解 双百 挺简单的) 原题题目 代码实现(首刷自解 双百 挺简单的) class Solution {public:inline void get_badorang ...

  9. [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994

    [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994 唉--之前写过笔记总结的问题,还是又卡住了. 自挂东南枝-- 题目地址: Rotting Oranges 题目如下: ...

最新文章

  1. eclipse中tomcat启动不了_Spring Boot中Tomcat是怎么启动的
  2. 李战java_李战:悟透JavaScript
  3. 5.2 使用pytorch搭建GoogLeNet网络 笔记
  4. Linux umask 文件默认权限
  5. 云服务器 自有操作系统,云服务器 自有操作系统
  6. kafka 创建topic_Kafka试题
  7. python求1到n的平方和小于1000_C语言,求1到1000以内17倍数平方和,谢谢了
  8. 实时计算-多级订单金额,及下级人数
  9. linux时间和win10差8小时,[转载]Ubuntu16.04与Win10时间差8个小时问题解决方案
  10. MySQL 数据库性能调优
  11. 推荐5个4K视频下载网站 (百万优质资源)
  12. PDF密码强制解除——一键解除
  13. 公众号创建菜单报错40001及菜单出现在先前公众号上的问题
  14. Word‘由于宏安全设置 无法找到宏’问题解决
  15. win系统中打印机驱动点击打开,没反应的解释
  16. 2018年的25个最佳数据可视化
  17. freecommander 快捷键列表 zz
  18. 2020年 Web 开发的最佳编程语言
  19. Java程序员必备辅助开发神器
  20. canvas画布js代码实现大风车的动画

热门文章

  1. 【socket】socket编程总目录
  2. 怎么做web接口测试
  3. pcs增加mysql资源_PCS集群的一些命令总结!非常好!
  4. 【数据库运维】MYSQL备份恢复管理(下)
  5. 0504|1823. 找出游戏的获胜者
  6. 以太网之父鲍勃·梅特卡夫获2022图灵奖,76岁进入新领域再出发!
  7. Java Socket 如何接收byte和String
  8. Django分页,过滤:
  9. 《Scanner的hasNext、hasNextInt用法》
  10. 从某一点出发沿任意一方向旋转矩阵计算思考与实现