1. 题目
200. 岛屿数量
2. 分析

- 当我们发现grid[0][0]是一个陆地,我们计数,并把这个陆地构成的岛屿都标记上

- 随后我们继续遍历grid数组,遇到海洋和已经被使用的陆地,我们跳过,最终到grid[3][2]找到第二个岛屿

3. 代码
public int numIslands(char[][] grid) {
if (grid.length == 0 || grid[0].length == 0) {
return 0;
}
int count = 0;
int r = grid.length, c = grid[0].length;
int[][] dp = new int[r][c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (grid[i][j] == '0' || dp[i][j] == 1) {
continue;
}
count++;
deepSearch(grid, i, j, dp);
}
}
return count;
}
public void deepSearch(char[][] grid, int i, int j, int[][] dp) {
if (i < 0|| i > grid.length - 1) {
return;
}
if (j < 0 || j > grid[0].length - 1) {
return;
}
if (grid[i][j] == '0' || dp[i][j] == 1) {
return;
}
dp[i][j] = 1;
deepSearch(grid, i, j+1, dp);
deepSearch(grid, i, j-1, dp);
deepSearch(grid, i+1, j, dp);
deepSearch(grid, i-1, j, dp);
}