题目:

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

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。

每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

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

分析:

最近在看广度优先搜素的题目,这个是比较简单基础的题了。

腐烂的橘子会把靠近他的新鲜的橘子腐蚀,那么就是只要从所有坏的橘子的地方一层一层往外遍历就可以了。

代码:

 //5ms 97%
class Solution {
public int orangesRotting(int[][] grid) {
Queue<int[]> q=new LinkedList<>();
int h=grid.length,w=grid[0].length,time=0;
for(int n=0;n<h;++n)
for(int m=0;m<w;++m)
if(grid[n][m]==2) {
int[] po= {0,n,m};
q.add(po);
}
while(!q.isEmpty()) {
int[] g=q.poll();
time=time>g[0]?time:g[0];
if(g[1]+1<h&&grid[g[1]+1][g[2]]==1) {
grid[g[1]+1][g[2]]=2;
int[] po= {g[0]+1,g[1]+1,g[2]};
q.add(po);
}
if(g[1]-1>=0&&grid[g[1]-1][g[2]]==1) {
grid[g[1]-1][g[2]]=2;
int[] po= {g[0]+1,g[1]-1,g[2]};
q.add(po);
}
if(g[2]-1>=0&&grid[g[1]][g[2]-1]==1) {
grid[g[1]][g[2]-1]=2;
int[] po= {g[0]+1,g[1],g[2]-1};
q.add(po);
}
if(g[2]+1<w&&grid[g[1]][g[2]+1]==1) {
grid[g[1]][g[2]+1]=2;
int[] po= {g[0]+1,g[1],g[2]+1};
q.add(po);
}
}
for(int n=0;n<h;++n)
for(int m=0;m<w;++m)
if(grid[n][m]==1)
return -1;
return time;
}
}

leetcode 994.腐烂的橘子的更多相关文章

  1. Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges)

    Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  2. Leetcode春季打卡第四天:994. 腐烂的橘子

    Leetcode春季打卡第四天:994. 腐烂的橘子 Leetcode春季打卡第四天:994. 腐烂的橘子 思路 思路是采用广度优先搜索,一层一层遍历. 首先先扫描矩阵,将坏橘子放进队列,记录正常橘子 ...

  3. [LeetCode] 994. Rotting Oranges 腐烂的橘子

    题目: 思路: 每个腐烂的橘子都能将自己上下左右的新鲜橘子传染,像极了现在的肺炎... 如果格子中只有一个腐烂的橘子,那么这便是一个典型的层次遍历,第一个传染多个,称为第二层,第二层传染第三层 但这里 ...

  4. [Swift]LeetCode994. 腐烂的橘子 | Rotting Oranges

    In a given grid, each cell can have one of three values: the value 0 representing an empty cell; the ...

  5. [leetcode] 994. Rotting Oranges

    题目 You are given an m x n grid where each cell can have one of three values: 0 representing an empty ...

  6. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  7. 2019年9月Leetcode每日训练日志

    2019-09-16 #1171 从链表中删去总和值为零的连续节点 #1170 比较字符串最小字母出现频次 #1169 查询无效交易 #226 翻转二叉树 2019-09-15 #1190 反转每对括 ...

  8. 【LeetCode】2020-03 每日一题

    121. 买卖股票的最佳时机(简单) [分类]:模拟.思维 [题解]:可以用O(n)的复杂度完成,只需要在遍历的时候记录到当前位置为止买入股票的最小价格minn,再维护一个当前卖出股票价(a-minn ...

  9. Rotting Oranges - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Rotting Oranges - LeetCode 注意点 解法 解法一:bfs.首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行 ...

随机推荐

  1. 一个web项目中web.xml<context-param>的作用

    转   <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置 ...

  2. Loadrunner11的关联问题 《转载》

    Loadrunner11的关联问题 链接:http://www.51testing.com/html/15/523415-821644.html

  3. 045-利用反射机制,简单的实现PHP插件模式

    <?php //利用反射机制,简单的实现PHP插件模式 # 假设,我们有一款开源产品,所有开发者都必须在我定制的需求之上,进行二次开发, # 而开发完成后的新模块,就是一个不一样的新插件,可以放 ...

  4. mysql 统计值为NULL不为0的问题

    今天在写一个接口的时候是要统计数据,但是突然发现报错,类型不匹配的问题,我返回的是Int类型的为啥会类型不匹配呢,真的是奇怪 然后把代码丢到正式环境里面运行一下,发现值为null 一下子就傻眼了,不可 ...

  5. Sublime 一些常用快捷键

    Sublime插件安装和使用-----------------------------最常用的1.新建文件-输入"html:xt"后 按"Ctrl+E键"或 & ...

  6. 通过while循环一步步实现九九乘法表

    # 打印#做出@列的效果height = int(input("height: ")) #用户输入一个高度 num_height = heightwhile num_height ...

  7. P 1032 挖掘机技术哪家强

    转跳点:

  8. 文献阅读报告 - Move, Attend and Predict

    Citation Al-Molegi A , Martínez-Ballesté, Antoni, Jabreel M . Move, Attend and Predict: An Attention ...

  9. Java基础——HashTable源码分析

    HashTable是基于哈希表的Map接口的同步实现 HashTable中元素的key是唯一的,value值可重复 HashTable中元素的key和value不允许为null,如果遇到null,则返 ...

  10. Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch

    今天向大家介绍的是多线程开发中的一些辅助类,他们的作用无非就是帮助我们让多个线程按照我们想要的执行顺序来执行.如果我们按照文字来理解Semaphore.CyclicBarrier.CountDownL ...