算法学习记录(八十一)

90 阅读1分钟

695. 岛屿的最大面积

给你一个大小为 m x n 的二进制矩阵 grid 。

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

image.png

解: 遍历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)
    }
};