题目描述:
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
注意:
num1
和num2
的长度都小于 5100.num1
和num2
都只包含数字0-9
.num1
和num2
都不包含任何前导零。- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解题思路:
题目明确要求不能将字符串转成int,不然这题毫无意义。解题思路和二进制的字符串相加一模一样,挨个取出数字相加,逢10进1,不够位补0参与计算。
代码实现(java):
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder sb=new StringBuilder();
//表示向前进一位
int pre=0;
while(num1.length()!=num2.length()){
if(num1.length()>num2.length())
num2="0"+num2;
else
num1="0"+num1;
}
char[] c1 = num1.toCharArray();
char[] c2 = num2.toCharArray();
for(int i=num1.length()-1;i>=0;i--){
int m=c1[i]-'0';
int n=c2[i]-'0';
int temp=m+n+pre;
if(temp>=10){
sb.append(temp-10);
pre=1;
}
else{
sb.append(temp);
pre=0;
}
}
if(pre==1)
sb.append('1');
return sb.reverse().toString();
}
}
补充:这个代码提交后的运行速度位32ms,后来我找了排名靠前的代码,提交后,发现速度也没有排名中那么好,不知道他这个是怎么回事,而且相同的代码提交两次也会有不同。