题目
解题思路
- 三层循环,最外层判断执行次数即分钟,初始腐烂标志为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;
}
}