Leetcode 994 腐烂的柿子
题目
在给定的网格中,每个单元格可以有以下三个值之一:
值 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 腐烂的柿子相关推荐
- leetcode 994:腐烂的橘子 java
994. 腐烂的橘子 - 力扣(LeetCode) (leetcode-cn.com) 多源广度优先搜索,初始的所有的腐烂橘子,等价于广度优先搜索的同一层,然后对每一层进行搜索: class Solu ...
- LeetCode 994. 腐烂的橘子
994. 腐烂的橘子 思路:直接bfs会出现2个腐烂的橘子在两边同时进行,这样会错误. 正确思路:每分钟变化后所有橘子状态为next_grid,直到橘子状态不改变.如果状态不变,且无新鲜的橘子则返回时 ...
- 【广度优先搜索】leetcode 994. 腐烂的橘子
994. 腐烂的橘子 文章目录 题目描述 示例1: 示例2: 示例3: 提示 方法:多源广度优先搜索 解题思路 代码 复杂度分析 题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以 ...
- LeetCode 994. 腐烂的橘子(图的BFS)
1. 题目 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会 ...
- leetcode 994 腐烂的橘子
先给出题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都 ...
- leetcode 994.腐烂的橘子
题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂 ...
- 图解LeetCode——994. 腐烂的橘子
一.题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向上相 ...
- Leetcode 994. 腐烂的橘子(DAY 262)---- 后端面试题(2020.1.5 华为机试真题)
文章目录 原题题目 代码实现(首刷自解 双百 挺简单的) 原题题目 代码实现(首刷自解 双百 挺简单的) class Solution {public:inline void get_badorang ...
- [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994
[JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994 唉--之前写过笔记总结的问题,还是又卡住了. 自挂东南枝-- 题目地址: Rotting Oranges 题目如下: ...
最新文章
- eclipse中tomcat启动不了_Spring Boot中Tomcat是怎么启动的
- 李战java_李战:悟透JavaScript
- 5.2 使用pytorch搭建GoogLeNet网络 笔记
- Linux umask 文件默认权限
- 云服务器 自有操作系统,云服务器 自有操作系统
- kafka 创建topic_Kafka试题
- python求1到n的平方和小于1000_C语言,求1到1000以内17倍数平方和,谢谢了
- 实时计算-多级订单金额,及下级人数
- linux时间和win10差8小时,[转载]Ubuntu16.04与Win10时间差8个小时问题解决方案
- MySQL 数据库性能调优
- 推荐5个4K视频下载网站 (百万优质资源)
- PDF密码强制解除——一键解除
- 公众号创建菜单报错40001及菜单出现在先前公众号上的问题
- Word‘由于宏安全设置 无法找到宏’问题解决
- win系统中打印机驱动点击打开,没反应的解释
- 2018年的25个最佳数据可视化
- freecommander 快捷键列表 zz
- 2020年 Web 开发的最佳编程语言
- Java程序员必备辅助开发神器
- canvas画布js代码实现大风车的动画