994. 腐烂的橘子
BFS:
java
class Solution {
private static final int[][] DIRECTIONS = {{-1,0},{1,0},{0,-1},{0,1}};
public int orangesRotting(int[][] grid) {
//记录答案
int ans = 0;
//记录烂橘子坐标的列表
List<int[]> p = new ArrayList<>();
//记录新鲜果子数量
int fresh = 0;
int m = grid.length;
int n = grid[0].length;
//记录每一个烂橘子和新鲜橘子
for(int i = 0;i<m;i++){
for(int j = 0;j<n;j++){
if(grid[i][j] == 2){
p.add(new int[]{i,j});
}
else if(grid[i][j] == 1){
fresh++;
}
}
}
//筛选条件
while(fresh>0 && !p.isEmpty()){
ans++;
//先记录本次的烂橘子坐标
List<int[]> temp = p;
//清空原本烂橘子的坐标
p = new ArrayList<>();
//对烂橘子的每一个坐标进行上下左右搜索
for(int[] tem:temp){
for(int[] direct:DIRECTIONS){
int i = tem[0]+direct[0];
int j = tem[1]+direct[1];
//看本次搜索到的有没有好橘子
if(i>=0 && i<m && j>=0 && j<n && grid[i][j]==1){
fresh--;
grid[i][j] = 2;
p.add(new int[]{i,j});
}
}
}
}
return fresh>0?-1:ans;
}
}
时间复杂度:O(MN)
空间复杂度:O(MN)