leetcode第43题字符串相乘

170 阅读1分钟

题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。题目链接

我的JavaScript解法

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var multiply = function(num1, num2) {
  const m = num1.length;
  const n = num2.length;
  const result = Array(m+n).fill(0);
  for(let i = m -1; i >=0; i--) {
    for(let j = n-1; j>=0; j--) {
      let multiplyRes = (+num1[i]) * (+num2[j]);
      let p1 = i+j+1; // 低位
      let p2 = i+j; // 高位
      let sum = result[p1] + multiplyRes; // 上次计算p1位置的结果+这次计算的结果
      result[p1] = sum % 10; //低位取余数
      result[p2] += Math.floor(sum / 10); // 高位10的倍数(进位)+ 之前p2位置的结果
    }
  }
  let index = 0;
  while(index < result.length && result[index] == 0) index++;
  return result.join('').slice(index, result.length) || '0'
};

解析: 模拟人工乘法运算的过程,可以计算大数乘法

  • 时间复杂度:O(n2)O(n^2)
  • 空间复杂度:O(n)O(n)