200. [数组][DFS]岛屿数量
200. 岛屿数量
岛屿问题是一类经典的网格搜索类问题。类似的岛屿题目还有:
方法一:DFS深度优先搜索
- 我们可以将二维网格看成一个无向图,竖直或水平相邻的 \(1\) 之间有边相连。
- 为了求出岛屿的数量,我们可以扫描整个二维网格。如果一个位置为 \(1\),则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中,每个搜索到的 \(1\) 都会被重新标记为 \(0\)。
- 最终岛屿的数量就是我们进行深度优先搜索的次数。
// 执行耗时:2 ms,击败了96.38% 的Java用户
// 内存消耗:41 MB,击败了88.17% 的Java用户
class Solution {
public int numIslands(char[][] grid) {
int ans = 0;
for (int r = 0; r < grid.length; r++){
for (int c = 0; c < grid[0].length; c++){
if(grid[r][c] == '1'){
ans++;
dfs(grid, r, c);
}
}
}
return ans;
}
public void dfs(char[][] grid, int r, int c){
if (r < 0 || c < 0 || r >= grid.length || c >= grid[0].length || grid[r][c] == '0') {
return;
}
grid[r][c] = '0';
dfs(grid, r - 1, c);
dfs(grid, r + 1, c);
dfs(grid, r, c - 1);
dfs(grid, r, c + 1);
}
}

浙公网安备 33010602011771号