GridTraveler 制表错误使得js中表格所有元素为0

问题描述 投票:0回答:1

这是 gridTraveler 的表格版本,您可以在 m*n 的框中输出从左上角到右下角的旅行方式数,但只能向下或向右移动。

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){
                //do nothing
            }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));

我已经测试了代码的大部分部分,除了我为 table[i][j] 赋值的那一行之外,它们都按预期工作。由于某种原因,for 循环不断地使所有元素都为 0,即使它应该在纸上给出正确的答案。我尝试询问 gpt,它说我的代码是正确的。有谁知道怎么了?

javascript dynamic-programming
1个回答
0
投票

我看了你的代码,你犯了一个简单的错误。您应该使用 += 而不是 =。

首先,由于您要跳过第一行和第一列,因此 for 循环可以从 1 开始。 然后让我们评估一下 for 循环正在做什么。

你的桌子一开始看起来像这样:

0 0 0 ...
0 1 0 ...
0 0 0 ...
...

在循环的第一个入口处,您将数组元素的值设置为:

//i = 1, j = 1
table[i][j] = table [i - 1][1] + table[1][j - 1];
//table[1][1] = 0 + 0;

查看表中的值,即 0。第一次执行循环后,整个表将是一堆 0,因此您将始终得到 0 作为答案。

这是应该有效的完整代码:

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

    table[1][1] = 1;

    console.log(table);

    for (let i = 1; i <= m; i++) {
        console.log(i + "th row");
        for (let j = 1; j <= n; j++) {
            table[i][j] += table[i - 1][j] + table[i][j - 1];
            console.log(table[i][j]);
        }
    }
    console.log(table);
    return table[m][n];
};

console.log(gridTraveler(3, 4));
© www.soinside.com 2019 - 2024. All rights reserved.