695. 岛屿的最大面积
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
解: 遍历grid,对于每一个位置都调用递归函数。递归函数接受三个参数,分别是两个坐标和面积。递归如果越界或者坐标对应的值不是1就返回。否则将1变成2,面积加1,并且朝4个方向继续递归。计算出面积后使用全局变量maxArea去比较是否为最大岛屿面积。遍历结束返回最大岛屿面积
const maxAreaOfIsland = function(grid) {
let maxArea = 0
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[0].length; j++) {
let area = {
max: 0
}
countIsland(i, j, area)
maxArea = Math.max(maxArea, area.max)
}
}
return maxArea
function countIsland(i, j, area) {
if (i < 0 || j < 0 || i === grid.length || j === grid[0].length || grid[i][j] !== 1) return
grid[i][j] = 2
area.max++
countIsland(i + 1, j, area)
countIsland(i - 1, j, area)
countIsland(i, j + 1, area)
countIsland(i, j - 1, area)
}
};