给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
输入 num1 = “0” , num2 = “0” 输出: “0”
输入 num1 = “999” , num2 = “9” 输出: “1008”
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解法一:
用比较原始的方法 ,把短字符串补0到与另外一个字符串长度相等。然后从个位十位百位顺序求和 num1 [i] + num2 [i] ,大于9的进1,直到 i 等于第 0 位结束
var addStrings = function(num1, num2) {
var newNum='', pushOne=0, sum, n1, n2
while((n1=num1.length) != (n2=num2.length)){
if(n1<n2){
num1='0'+num1
}else{
num2='0'+num2
}
}
for(var i=num1.length-1;i>-1;i--){
sum = parseInt(num1[i]) + parseInt(num2[i])+pushOne
if(sum>9){
sum %= 10;
pushOne=1
if(i==0) {
newNum = sum+newNum;
newNum=pushOne+newNum;break;
}
}else{
pushOne=0
}
newNum = sum+newNum;
}
return newNum
};
执行用时:76 ms
已经战胜 97.34 % 的 javascript 提交记录
解法二:
翻转两个字符串,从 num1 , num2 第0位开始求和。
在拼接返回字符串 newNum 时,相加的和越后面的放前面 sum + newNum
var addStrings = function(num1, num2) {
num1=num1.split("").reverse().join("")
num2=num2.split("").reverse().join("")
var newNum='', pushOne=0, sum, n1, n2
var x = num1.length>num2.length ? num1 : num2 ,len=x.length
for(var i=0;i<len;i++){
if(!(n1=num1[i])) n1=0
if(!(n2=num2[i])) n2=0
sum = parseInt(n1) + parseInt(n2)+pushOne
if(sum>9){
sum %= 10;
pushOne=1
if(i==len-1) {
newNum = sum+newNum;
newNum=pushOne+newNum;break;
}
}else{
pushOne=0
}
newNum = sum+newNum;
}
return newNum
};
执行用时:100 ms
已经战胜 57.52 % 的 javascript 提交记录