
问题在于怎么返回面积
递归的思想是,假设你是一家公司的老板,你不需要万事亲力亲为,而是拆解问题,交给下属去做。我们从岛屿的某个位置 (i,j) 登陆,然后一分为四,把统计岛屿面积的任务交给其他人去处理,自己只需累加其他人统计出来的岛屿面积,再加上 1,即 (i,j) 这个格子。
js
/**
* @param {number[][]} grid
* @return {number}
*/
var maxAreaOfIsland = function (grid) {
const dfs = (i, j) => {
let area = 1 // 当前块的值 (i,j) 这个格子
// i, j 表示当前坐标
grid[i][j] = -1
for (const [x, y] of [
[i + 1, j],
[i - 1, j],
[i, j + 1],
[i, j - 1],
]) {
if (x >= 0 && y >= 0 && x < grid.length && y < grid[0].length) {
// 越界条件判断
if (grid[x][y] !== -1 && grid[x][y] !== 0) {
// 访问过和水判断
// 把统计岛屿面积的任务交给其他人去处理,自己只需累加其他人统计出来的岛屿面积
area += dfs(x, y)
}
}
}
return area
}
let ans = 0
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[0].length; j++) {
if (grid[i][j] === 1) {
// 新岛屿
ans = Math.max(dfs(i, j), ans)
area = 0
}
}
}
return ans
}