1254. 统计封闭岛屿的数目
题目:


思路:
【1】可以参考 200. 岛屿数量 这道题,本质上是一样的,只不过这里靠近边缘的陆地不被纳入到计算当中一样。
代码展示:
//时间1 ms 击败 100% //内存41.6 MB 击败 99.30% class Solution { public int closedIsland(int[][] grid) { int num = 0; //先把边界的不能成为封闭岛屿的地方都处理了 for(int i = 0; i < grid.length; i++){ infect(i, 0, grid); infect(i, grid[0].length-1, grid); } for(int j = 0; j < grid[0].length; j++){ infect(0, j, grid); infect(grid.length-1, j, grid); } //检索封闭岛屿的地方 for(int i = 1; i < grid.length-1; i++){ for(int j = 1; j < grid[0].length-1; j++){ if(grid[i][j] == 0){ infect(i, j, grid); num++; } } } return num; } public static void infect(int x, int y, int[][] grid){ //限制条件(首先是上下左右边界,其次是小岛土地判断) if(x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || grid[x][y] == 1){ return; } if(grid[x][y] == 0){ //这里是将岛屿遍历完后变为海域,防止二次遍历 grid[x][y] = 1; } infect(x - 1, y, grid); infect(x + 1, y, grid); infect(x, y - 1, grid); infect(x, y + 1, grid); } }

浙公网安备 33010602011771号