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);
    }
}

 

posted @ 2023-08-21 12:24  忧愁的chafry  阅读(17)  评论(0)    收藏  举报