[LeetCodeの練習] [中] 200。島の数
200.島の数
アルゴリズムのアイデア:DFS、2次元配列
トピック:
Javaコード
class Solution {
int m = 0;//长
int n = 0;//宽
public int numIslands(char[][] grid) {
int res = 0;
m = grid.length;
n = grid[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1') {
//深度优先遍历,DFS次数就是岛屿数量
dfs(grid, i, j);
res++;
}
}
}
return res;
}
private void dfs(char[][] grid, int i, int j) {
//i,j指向的格子不存在或者是0(水)就返回
if (i < 0 || j < 0 || i >= m || j >= n || 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);//向右递归
}
}