# 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

# 鼓励我一下:

觉得还不错的话,给我的项目点个star

# 点个Star支持我一下~

最后更新时间: 7/2/2020, 4:27:35 PM