Skip to content

Latest commit

 

History

History
49 lines (36 loc) · 1.71 KB

File metadata and controls

49 lines (36 loc) · 1.71 KB

695 岛屿的最大面积

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

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

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

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

// 示例 1:

// 输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] // 输出:6 // 解释:答案不应该是 11 ,因为岛屿只能包含水平或垂直这四个方向上的 1 。 // 示例 2:

// 输入:grid = [[0,0,0,0,0,0,0,0]] // 输出:0

const maxAreaOfIsland = function (grid) {
  if (!grid || grid.length === 0 || grid[0].length === 0) return 0;

  let count = 0;

  let row = grid.length;
  let column = grid[0].length;
  for (let i = 0; i < row; i++) {
    for (let j = 0; j < column; j++) {
      if (grid[i][j] === 1) {
        count = Math.max(count, dfs(grid, i, j));
      }
    }
  }
  return count;

  function dfs(grid, i, j) {
    // 如果试图探索的范围已经越界,则return
    if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] === 0) return 0;

    // 遍历过的坑位都置0,防止反复遍历
    grid[i][j] = 0;
    // 遍历完当前的1,继续上下左右寻找下一个1,面积+1
    return 1 + dfs(grid, i + 1, j) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i, j - 1);
  }
};