打脸一下,js创建二维数组的错误示范
程序员文章站
2022-07-08 17:16:47
最近在力扣上刷动态规划的题,常常需要创建一个二维数组。起初楼主使用如下代码创建了一个二维数组,自以为简单方便的。(错误示范)// 比如说创建一个9*9的二维数组,这样的const dp = new Array(9).fill(Array.from({length: 9}))然后呢,明明算法是正确的,但是老是AC不了,输出的值是错误的。找了好久的原因,结果错误就是万万不该用Array.from,循环创建多个数组。首先看下from方法的定义:创建的是一个浅拷贝的数组实例,意味着我...
最近在力扣上刷动态规划的题,常常需要创建一个二维数组。
起初楼主使用如下代码创建了一个二维数组,自以为简单方便的。(错误示范)
// 比如说创建一个9*9的二维数组,这样的
const dp = new Array(9).fill(Array.from({length: 9}))
然后呢,明明算法是正确的,但是老是AC不了,输出的值是错误的。
找了好久的原因,结果错误就是万万不该用Array.from,循环创建多个数组。
首先看下from方法的定义:
创建的是一个浅拷贝的数组实例,意味着我所创建的dp[i][j]都指向的是原来{length: 9}的对象的地址。
这样自然就造成了,后面的值输出的错误了。
打脸了,不过遇到问题也是值得了,下次不会再放了。
额,难道前端创建二维数组,只能老老实实如下所示吗?
const dp = new Array(9)
for (let k=0; k<=9; k++) {
dp[k] = new Array(9)
}
最后附一下楼主在力扣上做的那道题《72 . 编辑距离》
/**
* @param {string} word1
* @param {string} word2
* @return {number}
*/
var minDistance = function(word1, word2) {
const len1 = word1.length
const len2 = word2.length
if (!len1 || !len2) return Math.max(len1, len2)
const dp = new Array(len1 + 1)
for (let k=0; k<=len1; k++) {
dp[k] = new Array(len2 + 1)
}
for (let i=0; i<=len1; i++) {
dp[i][0] = i
}
for (let j=0; j<=len2; j++) {
dp[0][j] = j
}
for (let i=1; i<=len1; i++) {
for (let j=1; j<=len2; j++) {
if (word1[i-1] == word2[j-1]) {
dp[i][j] = dp[i-1][j-1]
} else {
dp[i][j] = 1 + Math.min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1])
}
}
}
return dp[len1][len2]
};
本文地址:https://blog.csdn.net/romantic_love/article/details/107622351