Skip to content

695.岛屿的最大面积

md
给你一个大小为 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
 

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j] 为 0 或 1

就深度递归的计算area的面积

go
func maxAreaOfIsland(grid [][]int) (ans int) {
	// 广搜的写法
	// 0 表示水, 1 表示土地, 2 表示已访问
	w := len(grid[0])
	h := len(grid)

	var area func(grid [][]int, i int, j int) int

	area = func(grid [][]int, i int, j int) int {

		if !isArea(grid, i, j) {
			return 0
		}

		if grid[i][j] != 1 {
			return 0
		}

		grid[i][j] = 2

		return 1 + area(grid, i-1, j) + area(grid, i+1, j) + area(grid, i, j-1) + area(grid, i, j+1)
	}

	for i := 0; i < h; i++ {
		for j := 0; j < w; j++ {
			ans = Max(ans, area(grid, i, j))
		}
	}
	return
}

func Max(i, j int) int {
	if i > j {
		return i
	}
	return j
}

// i是外层, height
func isArea(grid [][]int, i int, j int) bool {
	w := len(grid[0])
	h := len(grid)
	return i < h && i >= 0 && j < w && j >= 0
}
本站访客数 人次 本站总访问量