Skip to content

LeetCode:43. 字符串相乘

方法一

js
/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var multiply = function (num1, num2) {
  if (num1 === '0' || num2 === '0') return '0';

  const len1 = num1.length;
  const len2 = num2.length;
  const res = new Array(len1 + len2).fill(0);

  // 从个位开始计算
  for (let i = len1 - 1; i >= 0; i--) {
    // 第二个数也从个位开始计算
    for (let j = len2 - 1; j >= 0; j--) {
      // res[i+j+1] 上次计算的进位值
      const temp = num1[i] * num2[j] + res[i + j + 1];
      // 个位值
      res[i + j + 1] = temp % 10;
      // 进位数,也加上之前的值
      res[i + j] += Math.floor(temp / 10);
    }
  }
  // 清除首位 0
  res[0] === 0 && res.splice(0, 1);

  return res.join('');
};

方法二

js
/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var multiply = function (num1, num2) {
  return (BigInt(num1) * BigInt(num2)).toString();
};

基于 MIT 许可发布