You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 695 岛屿最大面积JS递归实现异常及shadowGrid问题求助

问题根源

1. shadowGrid 初始化引用错误

你创建shadowGrid时用的写法存在引用共享问题:

var shadowGrid = Array(grid.length).fill(Array(grid[0].length).fill(0))

JS中Array.fill()如果填充的是引用类型(比如数组),会把同一个引用的实例复制给所有元素。也就是说你这个shadowGrid里的8行,本质上是指向同一个数组的指针,你修改任意一行的shadowGrid[i][j],所有行的第j位都会同步修改,这就是你最后看到所有行完全一致的核心原因。
正确的初始化方式是给每一行单独创建新数组:

var shadowGrid = new Array(grid.length).fill(0).map(() => new Array(grid[0].length).fill(0))

2. 重复调用countLand导致计算错误

你在双重for循环里连续调用了两次countLand(idR, idC):

console.log(`countLand: ${countLand(idR, idC)},  grid[idR][idC] = ${grid[idR][idC]},  islandSize : ${islandSize}`);
islandSize = Math.max(countLand(idR, idC), islandSize);

第一次调用countLand的时候,已经把当前岛屿所有关联的格子都在shadowGrid里标记为已访问,第二次调用的时候直接命中判断条件返回0,等于你完全没有拿到第一次计算出来的正确面积值,最终islandSize的计算完全错误。
修正方式是把countLand的结果存到临时变量里,只调用一次:

const currentSize = countLand(idR, idC);
console.log(`countLand: ${currentSize},  grid[idR][idC] = ${grid[idR][idC]},  islandSize : ${islandSize}`);
islandSize = Math.max(currentSize, islandSize);

修正后完整代码

function maxAreaOfIsland(grid){
    // 修正初始化方式,每行单独创建新数组
    var shadowGrid = new Array(grid.length).fill(0).map(() => new Array(grid[0].length).fill(0)),
        islandSize = 0;
    function countLand(idR, idC){
        if(idR < 0 || idR >= grid.length || idC < 0 || idC >= grid[0].length || shadowGrid[idR][idC] == 1 || grid[idR][idC] == 0 ){
            return 0;
        }
        shadowGrid[idR][idC] = 1;
        return 1 +  countLand(idR-1, idC) + countLand(idR+1, idC) + countLand(idR, idC-1) + countLand(idR, idC+1);
    }
    for(let idR = 0; idR < grid.length; idR++){
        for(let idC = 0; idC < grid[0].length; idC++){
            // 只调用一次countLand,存到临时变量
            const currentSize = countLand(idR, idC);
            islandSize = Math.max(currentSize, islandSize);
        }
    }
    return islandSize;
}
var 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]];
console.log(maxAreaOfIsland(grid)); // 输出正确结果6

内容的提问来源于stack exchange,提问作者Melshman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:15:04