题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
分析:
乘数 num1 位数为 M,被乘数 num2 位数为 N, num1 x num2 结果 res 最大总位数为 M+N,而且num1[i] x num2[j] 的结果再加上其第二位对应的结果数组中的res[i+j+1]得到一个sum,sum的个位就是新的res[i+j+1],sum的十位加上res[i+j]就是新的res[i+j]。
求解:
export function multiply(num1: string, num2: string): string {
let len1 = num1.length;
let len2 = num2.length;
const res = Array(len1 + len2).fill(0);
for (let i = len2 - 1; i >= 0; i--) {
const x = num2[i];
for (let j = len1 - 1; j >= 0; j--) {
const y = num1[j];
const sum = res[i + j + 1] + Number(x) * Number(y);
res[i + j + 1] = sum % 10;
res[i + j] = res[i + j] + Math.floor(sum / 10);
}
}
return res.join('').replace(/^0+/, '') || '0';
}