简单理解就是找到的"值为1的块"的数量,观察了一下,可以利用深度遍历BFS来解,bfs函数主要的作用就是找到所有和当前位置有关系的位置,然后统一变为0.
- 遍历整个二维数组,遇到值为1的时候,调用bfs(arr,x,y)函数. (x,y)为当前位置的坐标;
- bfs(arr,x,y)函数会将与x,y连接的整个岛屿都变为0(消灭一块岛屿);
那么岛屿的数量就是步骤1中总共调用bfs的次数n.
class Solution {
private final char isLand = '1';
private final char notLand = '0';
public int numIslands(char[][] grid) {
if(grid==null || grid.length < 1 || grid[0].length < 1){
return 0;
}
int row = grid.length;
int col = grid[0].length;
//当前阶段
int num = 0;
for(int i = 0;i < row ; i++){
for(int j = 0; j < col ; j++){
if(grid[i][j]== isLand){
BFS(grid,i,j);
num++;
}
}
}
return num;
}
/**
* BFS
* 将grid[row][col]相邻的所有岛屿都记录下来
* @param grid
*/
private void BFS(char[][] grid,int r,int c){
//递归函数的终止条件
// 1. 下标越界
// 2. 值为 0
if(c >= grid[0].length || r >= grid.length || r < 0 || c< 0 ||grid[r][c] == notLand){
return;
}
//值变为0
grid[r][c] = notLand;
BFS(grid,r-1,c);
BFS(grid,r+1,c);
BFS(grid,r,c-1);
BFS(grid,r,c+1);
return;
}
}