力扣中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; } }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号