给定一个二维数组,其中只有0,1。每个位置都与其上下相邻,如果是一堆1连成一片,那就称为岛。返回岛的数量。
解法一
public int countIslands(int[][] m) {
if(m==null||m[0]==null) return 0;
int N = m.length;
int M = m[0].length;
int res = 0;
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
if(m[i][j]==1) {
res++;
infect(m,i,j,N,M);
}
}
}
return res;
}
public void infect(int[][] m,int i,int j,int N,int M) {
if(i<0||i>=N||j<0||j>=M||m[i][j]!=1) {
return ;
}
m[i][j] = 2;
infect(m,i+1,j,N,M);
infect(m,i-1,j,N,M);
infect(m,i,j+1,N,M);
infect(m,i,j-1,N,M);
}