2024-5-13
题目来源
我的题解
方法一 广度优先遍历
开始找到所有的腐坏苹果,然后从这些位置开始广度优先遍历,直到队列中没有。然后判断是否还有未腐坏的苹果,若没有这将结果返回,若有则返回-1
时间复杂度:O(mn)。
空间复杂度:O(mn)。
public int orangesRotting(int[][] grid) {
int res=0;
int m=grid.length,n=grid[0].length;
Queue<int[]> queue=new LinkedList<>();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
int t=grid[i][j];
if(t==2){
queue.offer(new int[]{i,j});
}
}
}
int[][] pos={{0,1},{0,-1},{1,0},{-1,0}};
while(!queue.isEmpty()){
int sz=queue.size();
for(int i=0;i<sz;i++){
int[] t=queue.poll();
for(int[] p:pos){
int x=t[0]+p[0];
int y=t[1]+p[1];
if(check(m,n,x,y)&&grid[x][y]==1){
grid[x][y]=2;
queue.offer(new int[]{x,y});
}
}
}
if(!queue.isEmpty())
res++;
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]==1)
return -1;
}
}
return res;
}
public boolean check(int m,int n,int x,int y){
return x>=0&&x<m&&y>=0&&y<n;
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~