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
相关产品推荐
相关产品推荐

