提问人:kenpeter 提问时间:11/17/2023 最后编辑:kenpeter 更新时间:11/17/2023 访问量:26
leetcode 完美正方形,使用 2D dp,结果不正确 [已关闭]
leetcode perfect square, using 2D dp, result incorrect outcome [closed]
问:
我试图为完美的正方形提出一个 2D dp 解决方案
根据此解决方案,我注释掉了 2 行代码,它们正在工作
我的问题是:
难道我们不应该像dp[i-1][j]一样将第一维修改为i-1吗?
为什么要修改dp[i][j-1]?
以下代码未通过任何测试用例
/**
* @param {number} n
* @return {number}
*/
var numSquares = function(n) {
const tar = Math.floor(Math.sqrt(n));
// * b: outloop each_item
// * b: inner loop tar
const dp = new Array(1+n).fill(0).map((_, i) => {
return new Array(tar+1).fill(0);
});
// * b: tar = 0, inf (why not zero or 1)
for (let i = 1; i <= n; i++) {
dp[i][0] = Infinity;
}
// * b: 1 -> n (each item)
for(let i=1; i<=n; ++i) {
// * b: tar -> 1 (tar)
for(j=1; j<=tar; ++j) {
if(j*j <= i) {
// dp[i][j] = Math.min(1 + dp[i - j * j][j], dp[i][j - 1]); // working
dp[i][j] = Math.min(1 + dp[i-1][i - j * j], dp[i-1][j]); // not_working
} else {
//dp[i][j] = dp[i][j - 1]; // working
dp[i][j] = dp[i-1][j]; // not_working
}
}
}
return dp[n][tar];
};
以下代码通过所有测试用例
/**
* @param {number} n
* @return {number}
*/
var numSquares = function(n) {
const tar = Math.floor(Math.sqrt(n));
// * b: outloop each_item
// * b: inner loop tar
const dp = new Array(1+n).fill(0).map((_, i) => {
return new Array(tar+1).fill(0);
});
// * b: tar = 0, inf (why not zero or 1)
for (let i = 1; i <= n; i++) {
dp[i][0] = Infinity;
}
// * b: 1 -> n (each item)
for(let i=1; i<=n; ++i) {
// * b: tar -> 1 (tar)
for(j=1; j<=tar; ++j) {
if(j*j <= i) {
dp[i][j] = Math.min(1 + dp[i - j * j][j], dp[i][j - 1]); // working
} else {
dp[i][j] = dp[i][j - 1]; // working
}
}
}
return dp[n][tar];
};
不确定代码的哪一部分出错了。
答: 暂无答案
评论