Java——腐烂的橘子
题目链接
leetcode在线oj题——腐烂的橘子
题目描述
在给定的 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
解题思路
首先定义一个队列queue,遍历得到所有烂橘子的位置(值为2),将他们的坐标都放到队列里
然后将队列中的第一个元素取出来,将其相邻的没腐烂的橘子(值为1)的坐标放到队列里,将step++
再次重复之前的步骤:确定当前队列的长度(2),将队列的前两个元素都取出来,然后将其身边的新鲜橘子变成2,step++,如果所有位置都没有临近的新鲜橘子,那step就不++
继续重复刚才的步骤,即可得到正确答案
代码
class Solution {static class Pair{int x;int y;public Pair(int x, int y){this.x = x;this.y = y;}}public int orangesRotting(int[][] grid) {if(grid.length == 0 || grid == null){return 0;}int row = grid.length;int col = grid[0].length;Queue<Pair> queue = new LinkedList<>();//将所有坏掉的橘子入队for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if(grid[i][j] == 2){queue.offer(new Pair(i, j));}}}int step = 0;int[][] nextPos = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};//确定下一个位置while(!queue.isEmpty()){int size = queue.size();//记录当前循环是否有新的橘子变坏,有则为tureboolean flag = false;while(size != 0){Pair curPair = queue.poll();for (int i = 0; i < 4; i++) {int nextX = curPair.x + nextPos[i][0];int nextY = curPair.y + nextPos[i][1];if(nextX >= row || nextX < 0 || nextY >= col || nextY < 0){continue;}if(grid[nextX][nextY] == 1){flag = true;grid[nextX][nextY] = 2;queue.offer(new Pair(nextX, nextY));}}size--;}if(flag){step++;}}for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if(grid[i][j] == 1){return -1;}}}return step;}
}
Java——腐烂的橘子相关推荐
- Java腐烂的橘子leetcode
在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜 ...
- Leetcode--994. 腐烂的橘子(java)
在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回 ...
- leetcode 994:腐烂的橘子 java
994. 腐烂的橘子 - 力扣(LeetCode) (leetcode-cn.com) 多源广度优先搜索,初始的所有的腐烂橘子,等价于广度优先搜索的同一层,然后对每一层进行搜索: class Solu ...
- LeetCode_多源 BFS_中等_994.腐烂的橘子
目录 1.题目 2.思路 3.代码实现(Java) 1.题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐 ...
- 15.使用一样的BFS方法(代码几乎一模一样)解决多道LeetCode题目--542题(01矩阵)1765题(地图中的最高点)994腐烂的橘子
一.综述 本文总结自己刷LeetCode中遇到的使用BFS方法解决相同类型的题目.(代码几乎是一模一样) 二.01矩阵(LeetCode第542题) class Solution {int[][] d ...
- 文巾解题 994. 腐烂的橘子
1 题目描述 2 解题思路 2.1 多源广搜 使用广搜的思想,但是和一般的广搜不同,这里一开始的队列不是一个元素,而是一开始就腐烂的所有橘子的坐标. 同时我们队列里面的每一个元素是一个三元组,分别是腐 ...
- leetcode 994.腐烂的橘子
题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂 ...
- 994. 腐烂的橘子
994. 腐烂的橘子 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新 ...
- leetcode994. 腐烂的橘子(bfs)
在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回 ...
最新文章
- 资质申报 - 系统集成企业资质等级评定条件(2012年修定版)
- 动画库 Lottie 的使用
- 【安全漏洞】苹果取证的分析
- ubuntu上安装docker
- 精简 opencv python_基于Python的OpenCV人脸检测!简直不要太简单!
- IE(=8)版本不支持getElementsByClassName()
- 初学Java6:Java OOP基础语法总结
- 微信小程序秀才成语接龙趣味答题小游戏带流量主无授权源码
- 换主板 oracle 蓝屏,图文说明win7系统更换主板后开机蓝屏的办法
- 成都这家AI语音芯片公司又融了数千万,能“偷袭”科大讯飞不?
- Java 经典习题-初学
- 一文详尽移动互联网广告监测与归因
- 利用List集合实现简单的斗地主
- usb万能驱动win7_给 win7 系统镜像添加驱动
- P1616 疯狂的采药+P1833 樱花+P1077 [NOIP2012 普及组] 摆花+P1064 [NOIP2006 提高组] 金明的预算方案
- 什么是AWS Athena
- 一款轻量的JVM监控工具——Jvmm
- 【数据挖掘与商务智能决策】第十七章 神经网络
- android测试方法及流程,一种Android通讯终端硬件测试方法、测试工艺以及整机测试流程与流程...
- 数组队列存储结构的简单实现例子