class Solution {
public int numIslands(char[][] grid) {
if (grid == null || grid.length ==0) {
return 0;
}
int result =0;
int row =grid.length;
int col =grid[0].length;
for (int i=0;i<row;i++){
for (int j=0;j<col;j++) {
if (grid[i][j] == '1') {
// 计算岛屿的数量
result++;
// 将周围元素清零
clearZero(grid,i,j,row,col);
}
}
}
return result;
}
private void clearZero(char[][] grid,int x,int y,int row,int col) {
// 结束条件
if(x<0 || y<0 || x>=row || y>=col || grid[x][y] == '0') {
return;
}
grid[x][y] = '0';
clearZero(grid,x+1,y,row,col);
clearZero(grid,x-1,y,row,col);
clearZero(grid,x,y-1,row,col);
clearZero(grid,x,y+1,row,col);
}
}
解题的思路:
如果遍历到1 就将岛屿的数量加1 因为它是一个岛屿 所以要将周围等于1的网格清零,清零的目的是为了寻找下一个岛屿。