LC1254:统计封闭岛屿的数目

508 阅读1分钟

问题

如何计算一个岛 1. 周围都是水域1怎么确定

解决

首先这道题真正应该去解决的是封闭岛屿怎么定义,其实就是没有跟边界交集的岛屿就是封闭岛屿。所以先去遍历外层的,把外层的岛屿连接到的全部标记好,然后再去遍历内层的,这样子就能找到里面封闭岛屿了

class Solution {
    int n, m;
    public int closedIsland(int[][] grid) {
        n = grid.length;m = grid[0].length;
        for(int i = 0;i < n;i ++) {
            int step = i == 0 || i == n - 1 ? 1 : m - 1;
            for(int j = 0;j < m;j += step) {
                if(grid[i][j] == 0) {
                    dfs(i, j, grid);
                }
            }
        }
        int ans = 0;
        for(int i = 1;i < n - 1;i ++) {
            for(int j = 1;j < m - 1;j ++) {
                if(grid[i][j] == 0) {
                    ans ++;
                    dfs(i, j , grid);
                }
            }
        }
        return ans;
    }
    public void dfs(int x, int y, int[][] grid) {
        if(x < 0 || y < 0 || x >= n || y >= m || grid[x][y] == 1) return;
        grid[x][y] = 1;
        dfs(x - 1, y, grid);
        dfs(x + 1, y, grid);
        dfs(x, y - 1, grid);
        dfs(x, y + 1, grid);
    }
}