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

GridTraveler表格法JavaScript代码异常:所有表格元素恒为0

GridTraveler表格法代码的问题分析与修复

你的代码核心问题是初始值被循环覆盖:

你先初始化了table[1][1] = 1,但后续循环遍历到i=1且j=1时,会执行table[i][j] = table[i-1][j] + table[i][j-1],也就是把table[1][1]重新赋值为0 + 0 = 0,直接冲掉了初始的1,导致后续所有单元格的计算都基于0,最终结果自然全为0。

修复方案一:跳过初始单元格的赋值逻辑

在循环内增加判断,当遍历到(1,1)时跳过赋值,保留初始值:

const gridTraveler = (m, n) => {
    const table = Array(m+1)
        .fill()
        .map(_ => Array(n+1).fill(0));
    
    table[1][1] = 1;

    for(let i=0; i<=m; i++){
        console.log(i + 'th row');
        for(let j=0; j<=n; j++){
            if (i===0 || j===0){
                // 边界行/列保持0
            } else if (i === 1 && j === 1) {
                // 跳过初始单元格,保留预设的1
            } else {
                table[i][j] = table[i-1][j] + table[i][j-1];
            }
            console.log(table[i][j]);
        }
    }
    return table[m][n];
}

console.log(gridTraveler(2, 3)); // 输出3

修复方案二:换更直观的填表逻辑

遍历每个单元格,将当前单元格的路径数传递给右侧和下侧的单元格,避免初始值被覆盖:

const gridTraveler = (m, n) => {
    const table = Array(m+1)
        .fill()
        .map(_ => Array(n+1).fill(0));
    
    table[1][1] = 1;

    for(let i=1; i<=m; i++){
        for(let j=1; j<=n; j++){
            const current = table[i][j];
            // 向右移动,累加路径数到右侧单元格
            if (j+1 <= n) table[i][j+1] += current;
            // 向下移动,累加路径数到下侧单元格
            if (i+1 <= m) table[i+1][j] += current;
        }
    }
    return table[m][n];
}

console.log(gridTraveler(2, 3)); // 输出3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:45:04