沉没岛屿

7 阅读1分钟

200. 岛屿数量

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

function numIslands(grid: string[][]): number {
  // dfs 回溯 都是基于当前节点,判断当前路径,可选择路
  // 1, 我犯的第一个错误: 没有理解dfs,回溯的核心,基于当前点,思考我应该做什么
  // 其次没有理解沉默岛屿的核心,既然不想多累加,那就把基于当前岛屿把所有横轴,纵轴全部都沉默
  // 我直接在for循环里面再次递归,那就每次都从00开始,明显是错误的,我只是每次都基于当前点把上下左右的岛屿成魔
  // 错误的理解了x周和y周,后续写一定要先画图,不要混乱的情况下去定义坐标 ,我就定左侧为横轴,顶部方向为y轴
  let result = 0;
  let m = grid.length;
  let n = grid[0].length;

  const judgeIland = (i, j) => {
    if (i >= m || j >= n || i < 0 || j < 0) return
    if (grid[i][j] === '0') return
    grid[i][j] = '0'

    judgeIland(i, j - 1)
    judgeIland(i, j + 1)
    judgeIland(i - 1, j)
    judgeIland(i + 1, j)
  }
  const dfs = (grid, i, j) => {
    for (let i = 0; i < m; i++) {
      for (let j = 0; j < n; j++) {
        if (grid[i][j] === '1') {
          result++
          judgeIland(i, j)
        }


      }
    }


  }

  dfs(grid, 0, 0)
  return result

};