695. Max Area of Island

26 年 2 月 28 日 星期六
322 字
2 分钟
Screenshot 2026-02-28 at 10.24.27 am

问题在于怎么返回面积

递归的思想是,假设你是一家公司的老板,你不需要万事亲力亲为,而是拆解问题,交给下属去做。我们从岛屿的某个位置 (i,j) 登陆,然后一分为四,把统计岛屿面积的任务交给其他人去处理,自己只需累加其他人统计出来的岛屿面积,再加上 1,即 (i,j) 这个格子。

js
/**
 * @param {number[][]} grid
 * @return {number}
 */
var maxAreaOfIsland = function (grid) {
  const dfs = (i, j) => {
    let area = 1 // 当前块的值 (i,j) 这个格子
    // i, j 表示当前坐标
    grid[i][j] = -1
    for (const [x, y] of [
      [i + 1, j],
      [i - 1, j],
      [i, j + 1],
      [i, j - 1],
    ]) {
      if (x >= 0 && y >= 0 && x < grid.length && y < grid[0].length) {
        // 越界条件判断
        if (grid[x][y] !== -1 && grid[x][y] !== 0) {
          // 访问过和水判断
          // 把统计岛屿面积的任务交给其他人去处理,自己只需累加其他人统计出来的岛屿面积
          area += dfs(x, y)
        }
      }
    }
    return area
  }
  let ans = 0
  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[0].length; j++) {
      if (grid[i][j] === 1) {
        // 新岛屿
        ans = Math.max(dfs(i, j), ans)
        area = 0
      }
    }
  }
  return ans
}

文章标题:695. Max Area of Island

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/695_max_area_of_island[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。