问题
如何计算一个岛 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);
}
}