https://leetcode-cn.com/problems/number-of-islands/
问有多少个岛屿?
把数组都遍历一遍。从每个点进行DFS,DFS的过程中把遇到为1的都变为0。这样就相当于把一个独立的岛屿完整的走了一遍,并且不影响下一个岛屿的计算。
这里所谓的DFS,就是递归,基于当前点,上下左右的走下去。
class Solution {
public int numIslands(char[][] grid) {
if(grid == null || grid.length == 0){
return 0;
}
int len1 = grid.length;
int len2 = grid[0].length;
int count = 0;
for(int i = 0; i < len1; i++){
for(int j = 0; j < len2; j++){
if(grid[i][j] == '1'){
count++;
DFS(grid, i, j);
}
}
}
return count;
}
private void DFS(char[][] grid, int i, int j){
int len1 = grid.length;
int len2 = grid[0].length;
if(i<0 || j<0 || i>=len1 || j>=len2 || grid[i][j] == '0'){
return;
}
grid[i][j] = '0';
DFS(grid,i-1,j);
DFS(grid,i+1,j);
DFS(grid,i,j+1);
DFS(grid,i,j-1);
}
}
也可以用所谓的BFS。实际上是差不多的。整体思路是一样的,区别就在于是使用BFS来变化数组。也就是使用Queue来进行处理(实现一层一层的向外扩)。