题目
我的思路
我这里的解法使用的深度优先算法的思想
把探索过的岛屿直接标记为 x
,没有额外创建一个数组
也可以参考之前写的 广度优先
和 深度优先
的解法和思路
LeetCode Java 队列结合广度优先算法(BFS)实现岛屿个数计算,附带详细分析
LeetCode Java 深度优先算法(DFS)实现岛屿个数计算,附带详细分析
代码
class Solution {
public int numIslands(char[][] grid) {
// 岛屿数量
int count = 0;
if (grid.length == 0) {
return 0;
}
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if (grid[i][j] == '1') {
count ++;
grid = DFS(i, j, grid);
}
}
}
return count;
}
public char[][] DFS(int i, int j, char[][] grid) {
// 判断防止上下左右探索时跨域
if (i < 0 || j < 0 || i >= grid.length || j >= grid[i].length) {
return grid;
}
// 如果是海域或已探索的陆地,则不继续探索
if (grid[i][j] == '0' || grid[i][j] == 'x') {
return grid;
}
// 完成探索标记为 x
if (grid[i][j] == '1') {
grid[i][j] = 'x';
}
// 上下左右探索
grid = DFS(i - 1, j, grid);
grid = DFS(i + 1, j, grid);
grid = DFS(i, j - 1, grid);
grid = DFS(i, j + 1, grid);
return grid;
}
}