问题描述

给定一个非空二维数组 grid 形成的岛屿,grid[i][j] 表示岛屿上的位置 E、F、G、0 分别代表:

  • 0 代表水;
  • 1 代表陆地;
  • E 代表你的能量源;
  • F 代表飞机场,它紧挨着 E(且 E 紧挨着水源);
  • G 代表防护栏障碍物。 岛屿以网格形式表示。 返回岛屿的最大面积。

注意: 标准答案需要考虑所有可能的岛屿,包括那些可能由障碍物 G 包围的岛屿。

解法一

解题思路:

我们可以使用深度优先搜索(DFS)来解决这个问题。对于每个陆地单元格,我们递归地计算其周围陆地单元格的数量,直到没有更多的陆地单元格为止。每次递归时,我们都会标记访问过的单元格,以避免重复计算。

/** @lc app=leetcode.cn id=695 lang=javascript** [695] Max Area of Island*/// @lc code=start
function maxAreaOfIsland(grid) {let maxArea = 0;const directions = [[0, 1], [1, 0], [-1, 0], [0, -1]];const dfs = (row, col) => {if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] === 0 || grid[row][col] === 'G') {return 0;}grid[row][col] = 0; // 标记为已访问let area = 1;for (let [dr, dc] of directions) {area += dfs(row + dr, col + dc);}return area;};for (let i = 0; i < grid.length; i++) {for (let j = 0; j < grid[0].length; j++) {if (grid[i][j] === 1) {maxArea = Math.max(maxArea, dfs(i, j));}}}return maxArea;
}
// @lc code=end