力扣中994 腐烂的橘子

想到层次遍历 用来记录一共传递了几轮  方法是记录当前队列元素个数 出栈完一次然后再记录 再出

题解用的再用一个map记录层数 然后每次入队列的都压入map key为上级+1 而且也没有用int[]类型 直接用i*行+j 到时候取余和取整

比较顺利 第一次是结果总大一 第二次是全0会出错

 

 

class Solution {
    public int orangesRotting(int[][] grid) {
        
        //极端情况全0 直接输出了-1 应该是0
        
        int count=0;
        int res=-1;//最初res置0在每次队列结束完一遍时加一 导致结果全部大1 因为最后一次啥都不压也加1了
        int row=grid.length;
        int line=grid[0].length;
        int[] dx= {0,0,-1,1},dy= {1,-1,0,0};
        Queue<int[]> queue=new LinkedList<int[]>();
        
        for(int i=0;i<row;i++) {
            for(int j=0;j<line;j++) {
                if(grid[i][j]==2) {
                    queue.add(new int[]{i,j});            
                }
                if(grid[i][j]==0){
                    count++;
                }
            }
        }
        if(count==row*line) {
            return 0;
        }
        while(!queue.isEmpty()) {
            int size=queue.size();
            for(int i=0;i<size;i++) {
                int[]temp=queue.poll();
                for(int k=0;k<4;k++) {
                    if(temp[0]+dx[k]>-1 && temp[0]+dx[k]<row && temp[1]+dy[k]>-1 && temp[1]+dy[k]<line &&grid[temp[0]+dx[k]][temp[1]+dy[k]]==1) {
                        grid[temp[0]+dx[k]][temp[1]+dy[k]]=2;
                        queue.add(new int[]{temp[0]+dx[k],temp[1]+dy[k]});
                    }
                }
            }
            res=res+1;
        }
        for(int i=0;i<row;i++) {
            for(int j=0;j<line;j++) {
                if(grid[i][j]==1) {
                    return -1;            
                }
            }
        }
        
        return res;
    }
}

 

posted @ 2023-03-09 17:58  Ssshiny  阅读(49)  评论(0)    收藏  举报