题解 | 岛屿数量
岛屿数量
https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
import java.util.*;
public class Solution {
/**
*
*/
public int solve (char[][] grid) {
// 边界条件判断
if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;
int islandCount = 0;
int row = grid.length;
int col = grid[0].length;
// 1. 双重循环“巡逻”整个网格
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
// 2. 只有发现没被遍历过的陆地 '1' 时,才算发现一个新岛屿
if (grid[i][j] == '1') {
islandCount++;
// 3. 召唤 DFS 把这个岛屿连通的所有陆地全部感染成 '0'
infect(grid, i, j);
}
}
}
return islandCount;
}
public void infect(char[][] grid, int x, int y) {
// 边界处理:越界了,或者遇到了海洋 '0',直接返回
if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0'){
return;
}
// 将当前陆地变为海洋,防止死循环和重复计算(替代了 used 数组)
grid[x][y] = '0';
infect(grid, x - 1, y); // 上
infect(grid, x + 1, y); // 下
infect(grid, x, y - 1); // 左
infect(grid, x, y + 1); // 右
}
}
查看5道真题和解析