当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 打脸一下,js创建二维数组的错误示范

打脸一下,js创建二维数组的错误示范

2020年07月28日  | 移动技术网IT编程  | 我要评论

最近在力扣上刷动态规划的题,常常需要创建一个二维数组。

起初楼主使用如下代码创建了一个二维数组,自以为简单方便的。(错误示范

// 比如说创建一个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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网