day6
leetcode43、字符串相乘O(mn)(104 ms)
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
let m = num1.length;
let n = num2.length;
let arr = new Array(m+n).fill(0);
let pos = arr.length-1;
for(let i=n-1; i>=0; i--){
let temp = pos; // 数组当前位置需计算的值
let jinwei = 0;
for(let j=m-1; j>=0; j--){
let val = num2[i]*num1[j]+arr[temp]; // mark1: 当前值=乘积+"进位"或者前一个竖式的计算结果
let yu = val % 10;
jinwei = Math.floor(val / 10);
arr[temp] = yu;
arr[--temp] += jinwei; // mark2: 前一个位置为进位或者前一个竖式的计算结果
}
pos--;
}
// 找到数组的第一个非零位置
// 如果都为0, 返回"0"
let i = 0;
while(arr[i]==0) i++;
if(i==arr.length) return "0";
return arr.slice(i).join("");
};