终极指南:如何在Mac上轻松制作Windows启动盘并绕过系统限制
2026/7/6 4:28:39
994. 腐烂的橘子 - 力扣(LeetCode)
广度遍历:时间空间都为mxn
class Solution { public int orangesRotting(int[][] grid) { /* 任意位置可能存在腐烂橘子,新鲜橘子 count统计新鲜数量 round统计路径长度 先查出所有的腐烂橘子坐标,放入队列,队列存储腐烂橘子坐标 每轮所有腐烂位置同时广度优先遍历一层,保证同时让所有腐烂橘子一起向四周传染一层 然后再把传染的橘子加入队列,直到count=0或者队列无数据 广度优先遍历要考虑边界和腐烂过的数据 */ int round = 0; int count =0 ; Queue<int[]> queue = new LinkedList<>(); for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[0].length; j++){ if(grid[i][j]==1){ count++; } if(grid[i][j]==2){ queue.offer(new int[]{i, j}); } } } while(count > 0 && !queue.isEmpty()){ round++; int n = queue.size(); for(int i = 0; i < n; i++){ int[] cur = queue.poll(); int r = cur[0]; int c = cur[1]; if(c-1>=0 && grid[r][c-1] == 1){ grid[r][c-1]=2; count--; queue.offer(new int[]{r,c-1}); } if(c+1 < grid[0].length&& grid[r][c+1] == 1){ grid[r][c+1]=2; count--; queue.offer(new int[]{r,c+1}); } if(r-1>=0 && grid[r-1][c] == 1){ grid[r-1][c]=2; count--; queue.offer(new int[]{r-1,c}); } if(r+1<grid.length && grid[r+1][c] == 1){ grid[r+1][c]=2; count--; queue.offer(new int[]{r+1,c}); } } } if(count > 0){ return -1; }else{ return round; } } }