欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

打脸一下,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方法的定义:

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

创建的是一个浅拷贝的数组实例,意味着我所创建的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

相关标签: 算法 javascript