题目链接

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——腐烂的橘子相关推荐

  1. Java腐烂的橘子leetcode

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

  2. Leetcode--994. 腐烂的橘子(java)

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

  3. leetcode 994:腐烂的橘子 java

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

  4. LeetCode_多源 BFS_中等_994.腐烂的橘子

    目录 1.题目 2.思路 3.代码实现(Java) 1.题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐 ...

  5. 15.使用一样的BFS方法(代码几乎一模一样)解决多道LeetCode题目--542题(01矩阵)1765题(地图中的最高点)994腐烂的橘子

    一.综述 本文总结自己刷LeetCode中遇到的使用BFS方法解决相同类型的题目.(代码几乎是一模一样) 二.01矩阵(LeetCode第542题) class Solution {int[][] d ...

  6. 文巾解题 994. 腐烂的橘子

    1 题目描述 2 解题思路 2.1 多源广搜 使用广搜的思想,但是和一般的广搜不同,这里一开始的队列不是一个元素,而是一开始就腐烂的所有橘子的坐标. 同时我们队列里面的每一个元素是一个三元组,分别是腐 ...

  7. leetcode 994.腐烂的橘子

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

  8. 994. 腐烂的橘子

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

  9. leetcode994. 腐烂的橘子(bfs)

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

最新文章

  1. 资质申报 - 系统集成企业资质等级评定条件(2012年修定版)
  2. 动画库 Lottie 的使用
  3. 【安全漏洞】苹果取证的分析
  4. ubuntu上安装docker
  5. 精简 opencv python_基于Python的OpenCV人脸检测!简直不要太简单!
  6. IE(=8)版本不支持getElementsByClassName()
  7. 初学Java6:Java OOP基础语法总结
  8. 微信小程序秀才成语接龙趣味答题小游戏带流量主无授权源码
  9. 换主板 oracle 蓝屏,图文说明win7系统更换主板后开机蓝屏的办法
  10. 成都这家AI语音芯片公司又融了数千万,能“偷袭”科大讯飞不?
  11. Java 经典习题-初学
  12. 一文详尽移动互联网广告监测与归因
  13. 利用List集合实现简单的斗地主
  14. usb万能驱动win7_给 win7 系统镜像添加驱动
  15. P1616 疯狂的采药+P1833 樱花+P1077 [NOIP2012 普及组] 摆花+P1064 [NOIP2006 提高组] 金明的预算方案
  16. 什么是AWS Athena
  17. 一款轻量的JVM监控工具——Jvmm
  18. 【数据挖掘与商务智能决策】第十七章 神经网络
  19. android测试方法及流程,一种Android通讯终端硬件测试方法、测试工艺以及整机测试流程与流程...
  20. 数组队列存储结构的简单实现例子

热门文章

  1. Windows 10创建用户
  2. 王炸!10分钟把ChatGPT部署成24小时微信机器人!
  3. android文本框带图片格式,android 带图片的文本框
  4. 『Photo Shop实用技巧』之 去除红眼
  5. python培训费用多少钱?学习python课程价格?
  6. 华为产品总监谈投身互联网:要避免与腾讯竞争
  7. 3年功能测试经验,面试拿到15k难吗?
  8. 一文读懂 Kafka 事务机制
  9. Pie-1-南丁格尔玫瑰图-中心带文字
  10. octree与kd-tree对比