2020/7/7
抱歉各位,可能是我的表达不清,我不是对于这道题有疑惑,是在写这道题的过程中我发现我的结果有误,向各位请教问题出在哪里了。
重申一下我的问题:我的问题是为什么我对于二维列表中的一个元素进行值的修改,却是一整个列的元素值都被修改了呢?
问题出在了--->我在初始化的过程中使用同一个一维列表对于二维列表进行赋值,导致了多个行其实指向了同一个地址,因此出现这样的问题,感谢各位的帮助!
初学javascript,使用leetcode写题来加深掌握,见leetcode.T63。方法很明确,动态规划,但是在初始化上使用了多加一行一列来保存状态,但是在循环的过程中出现了问题,一次循环应该改变列表中一个元素的值却整个列被改变,不知道原因。
// Algorithm, 最基本的循环
for(i=1;i<=r;i++){
for(j=1;j<=c;j++){
console.log("add result",dp[i-1][j] + dp[i][j-1])
dp[i][j] = dp[i-1][j] + dp[i][j-1];
console.log(i,j,dp);
}
}
将结果进行了打印
// result
add result -2
1 1 [
[ -1, -1, -1, -1 ],
[ -1, -2, 0, 0 ],
[ -1, -2, 0, 0 ],
[ -1, -2, 0, 0 ]
]
add result -3
1 2 [
[ -1, -1, -1, -1 ],
[ -1, -2, -3, 0 ],
[ -1, -2, -3, 0 ],
[ -1, -2, -3, 0 ]
]
不知道是不是自己初始化的问题,弄了一下午还是错的。希望有人能帮帮忙
// 源代码
/**
* @param {number[][]} obstacleGrid
* @return {number}
*/
var uniquePathsWithObstacles = function(obstacleGrid) {
// Initilization
const r = obstacleGrid.length;
const c = obstacleGrid[0].length;
const tt = new Array();
for(i=0;i<=c;i++)
{
tt[i] = -1;
}
const t = new Array();
for(i=0;i<=c;i++)
{
t[i] = 0;
}
const dp = new Array();
dp[0] = tt;
for(i=1;i<=r;i++)
{
dp[i] = t;
dp[i][0] = -1;
}
// Algorithm
for(i=1;i<=r;i++){
for(j=1;j<=c;j++){
console.log("add result",dp[i-1][j] + dp[i][j-1])
dp[i][j] = dp[i-1][j] + dp[i][j-1];
console.log(i,j,dp);
}
}
// console.log(dp);
return dp[r][c];
};