200. 岛屿数量

65 阅读1分钟

题目

image.png

思路一 DFS

遍历二维数组,遇到1,岛屿数量加一,同时要把岛屿自身以及上下左右沉默(置0),结束后回到岛屿自身继续遍历,如此往复直到数组结束。

复杂度

时间复杂度:O(MN),MN分别为二维数组的长度。 空间复杂度:O(MN),MN分别为二维数组的长度。递归中的调用帧保存。

编码

const numIslands = (grid) => {
  let count = 0
  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[i].length; j++) {
      if (grid[i][j] === '1') {
        count += 1
        turnZero(i, j, grid)
      }
    }
  }
  return count
}
function turnZero(i, j, grid) {
  if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length) return
  if (grid[i][j] === '0') return
  grid[i][j] = '0'
  turnZero(i - 1, j, grid)
  turnZero(i + 1, j, grid)
  turnZero(i, j - 1, grid)
  turnZero(i, j + 1, grid)
}