994. 腐烂的橘子 --力扣 --JAVA
2023-12-17 21:07:00
题目
在给定的?
m x n
?网格?grid
?中,每个单元格可以有以下三个值之一:
- 值?
0
?代表空单元格;- 值?
1
?代表新鲜橘子;- 值?
2
?代表腐烂的橘子。每分钟,腐烂的橘子?周围?4 个方向上相邻?的新鲜橘子都会腐烂。
返回?直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回?
-1
?。
解题思路
- 三层循环,最外层判断执行次数即分钟,初始腐烂标志为2,每次加1,作为下一次腐烂标志;
- 里面双层循环,当有腐烂的橘子是将周围新鲜橘子腐烂修改当前位置为腐烂标志加1,参加下一次判断;
- 当无法腐烂新鲜橘子时跳出循环,遍历是否还存在新鲜橘子,存在则返回-1,不存在则返回腐烂标志 - 2;
代码展示
class Solution {
public int orangesRotting(int[][] grid) {
int n = grid.length;
int m = grid[0].length;
int start = 2;
boolean status = false;
while (true) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == start) {
grid[i][j] = start + 1;
if(i > 0 && grid[i - 1][j] == 1){
grid[i - 1][j] = start + 1;
status = true;
}
if(j > 0 && grid[i][j - 1] == 1){
grid[i][j - 1] = start + 1;
status = true;
}
if(i < n - 1 && grid[i + 1][j] == 1){
grid[i + 1][j] = start + 1;
status = true;
}
if(j < m - 1 && grid[i][j + 1] == 1){
grid[i][j + 1] = start + 1;
status = true;
}
}
}
}
if(!status){
break;
}
start++;
status = false;
}
for (int[] ints : grid) {
for (int j = 0; j < m; j++) {
if (ints[j] == 1) {
return -1;
}
}
}
return start - 2;
}
}
?
文章来源:https://blog.csdn.net/qq_45794129/article/details/135029764
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!