这是 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,它说我的代码是正确的。有谁知道怎么了?
我看了你的代码,你犯了一个简单的错误。您应该使用 += 而不是 =。
首先,由于您要跳过第一行和第一列,因此 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));