美文网首页
leetcode_43字符串想加

leetcode_43字符串想加

作者: 看到这朵小fa了么 | 来源:发表于2020-08-13 16:26 被阅读0次

    用数据存储后按位相加,记录进位,但是这个自动转化为指数表示法了,过不了用例,吐血

    // var multiply = function(num1, num2) {
    //   if(num1==0|| num2==0) return "0"
    //   let list = num2.split('')
    //   let length = list.length-1
    //   let result = list.map((item, i) => {
    //       return (Number(item) * Number(num1) * Math.pow(10, length-i)).toString().split('')
    //   })
      
    //   let temp = 0
    //   let number = num1.length+num2.length
    //   let resultList = Array(number).fill(0)
    //   for(let i=0; i<number; i++){
    //      let sum = 0
    //      for(let j=0; j<=length; j++){
    //          sum+=Number(result[j].pop() || 0)
    //      }
    //      sum+=temp
    //      let before = parseInt(sum / 10)
    //      if(before>0) {
    //          temp = before
    //      } else {
    //          temp = 0
    //      }
    //      resultList[i] = sum % 10
    //   }
    //   if(temp > 0) {
    //       resultList.push(temp)
    //   }
    //   let endList = resultList.reverse()
    //   if(endList[0]==0) {
    //       endList.shift()
    //   }
    //   return endList.join('')
    // };
    

    用一个数组来存储,每次进行一个位的乘积更新,类似动态规划

    var multiply = function (num1, num2) {
      if (num1 === '0' || num2 === '0') return '0'
      let n = num1.length,
      m = num2.length
      dp = new Array(n + m).fill(0)
    
      for (let i = n - 1; i >= 0; i--) {
        for (let j = m - 1; j >= 0; j--) {
          // dp[i+j+1] 包含上一轮该乘积
          let sum = dp[i + j + 1] + parseInt(num1[i] * num2[j], 10)
          // 当前位i+j+1
          dp[i + j + 1] = parseInt(sum % 10, 10)
          // 上一位
          dp[i + j] = dp[i + j] + parseInt(sum / 10, 10)
        }
      }
      return dp.join('').replace(/^0*/, '')
    }
    

    相关文章

      网友评论

          本文标题:leetcode_43字符串想加

          本文链接:https://www.haomeiwen.com/subject/adqidktx.html