题目描述:
二维矩阵 grid 由 0 (土地)和 1 (水)组成。岛是由最大的4个方向连通的 0 组成的群,封闭岛是一个 完全 由1包围(左、上、右、下)的岛。
请返回 封闭岛屿 的数目。
示例:
解题思路:
最少要三行三列否则岛屿不封闭–》边缘不管,从第二行第二列开始,循环判断若为0,查看上下左右是否为一
代码附上:
class Solution {
int m=0,n=0,ans=0,xd=0,yd=0;
private int[] dx={-1,0,1,0},dy={0,1,0,-1};
public int closedIsland(int[][] grid) {
m=grid.length;
n=grid[0].length;
ans=0;
if(m<=2||n<=2) return 0;
for(int i=1;i<m-1;i++) {
for(int j=1;j<n-1;j++) {
if(grid[i][j]==0) {
if(determine(grid,i,j)) ans++;
}
}
}
return ans;
}
public boolean determine(int[][] grid,int x,int y) {
if((x==0||x==m-1||y==0||y==n-1)&&grid[x][y]==0) return false;
boolean f=true;
grid[x][y]=1;
for(int i=0;i<4;i++) {
xd=x+dx[i];
yd=y+dy[i];
if(xd<0||xd>=m||yd<0||yd>=n||grid[xd][yd]==1) continue;
f=f&determine(grid,xd,yd);
}
return f;
}
}