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];
};
没看懂要做什么。。。说一下你想实现什么吧。。
参考下 https://blog.csdn.net/qq_43320728/article/details/104951078
js的话,需要首先把v初始化为col长度,然后每一行初始化为obstacleGrid的长度
M* N 二维数组, 转成 迭代 M*N次
for(var i=0;i<M*N;i++){
row = i/M;
column = i%N
A[row][column] ='修改值'
}
let arr = []
function changeColumn(column, value){
for (let i = 0, len = arr.length; i < len; i++) {
let arrj = arr[i]
for (let j = 0, lenj = arrj.length; j < lenj; j++) {
if(j == column){
arrj[j] = value
break
}
}
}
}
function uniquePathsWithObstacles(obstacleGrid) {
// Initilization
const r = obstacleGrid.length;
const c = obstacleGrid[0].length;
for (let i = 0; i < r; i++) {
for (let j = 0; j < c; j++) {
obstacleGrid[i][j] = -1;
}
}
for (let i = 1; i < obstacleGrid.length; i++) {
for (let j = 1; j < obstacleGrid[i].length; j++) {
obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1];
}
}
console.log(obstacleGrid)
return obstacleGrid[r - 1][c - 1];
};