字符串相乘 LeetCode js实现
题目描述
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
解题思路
一开始我就想那字符串每个位转换成整数,然后相乘就好了
var multiply = function(num1, num2) {
var n=0, m=0
for(let i=0; i<num1.length; i++){
n = n*10 + parseInt(num1[i])
}
for(let j=0;j<num2.length;j++){
m = m*10 + parseInt(num2[j])
}
var res = n*m
return res.toString()
};
结果 123456789*987654321 得到的结果不对,原因是超出了javaScript最大的数Number.MAX_SAFE_INTEGER
导致结果不对,那只能换另一种方法了。
看见LeetCode中大家的做法 真是妙啊
实现代码在这里:
var multiply = function(num1, num2) {
if(num1 == '0' || num2 == '0') return '0';
num1 = num1 + '';
num2 = num2 + '';
let l1 = num1.length,l2 = num2.length,
store = new Array(l1 + l2 - 1).fill(0), t = 0, r = '';
// 每个位相乘的结果
for( let i = 0; i < l2; i++ ){
for( let j = 0; j < l1; j++ ){
store[i + j] += (+num2[i] * + num1[j])
}
}
let k = store.length;
while(k--){
t += store[k];
r = t % 10 + r;
t = t / 10 | 0;
}
return t > 0 ? (t + r) : r;
}