# 200 题岛屿数量
# 题目链接
# 难度:中等
# 思路分析:
递归
# 想
# 一
# 想
# 再
# 看
# 答
# 案
# 想
# 一
# 想
# 再
# 看
# 答
# 案
# 代码:
// 深度优先
var numIslands = function(grid) {
let num = 0;
if (grid && grid.length) {
const maxI = grid.length - 1,
maxJ = grid[0].length - 1;
// 递归将连接的岛屿全都转为海水 连成一片
function overturn(i, j) {
if (i < 0 || j < 0 || i > maxI || j > maxJ) return;
if (grid[i][j] === "1") {
grid[i][j] = "0";
overturn(i, j - 1);
overturn(i - 1, j);
overturn(i + 1, j);
overturn(i, j + 1);
}
}
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[i].length; j++) {
if (grid[i][j] === "1") {
// 每次碰到1就说明有新的岛屿 与之相连的岛屿都已经递归转化成海水了
num++;
overturn(i, j); // 将连接的岛屿全都转为海水 连成一片
}
}
}
}
return num;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 鼓励我一下:
觉得还不错的话,给我的项目点个star吧