给定两个字符串形式的非负整数
num1
和num2
,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如
BigInteger
), 也不能直接将输入的字符串转换为整数形式。输入:num1 = "11", num2 = "123" 输出:"134"
字符串相加这道题其实对于很多人来说是有挑战性的,因为有进位,所以很多人对此就望而生畏,但是,今天,看完我这篇博客后,你会对你已经的恐惧的烟消云算,我今天准备采取较为简单的方法来解决这道题
在数学中我们进场用这种进制的方式进行两数的加法运算,我们在字符串中的加法运算也可以运用这种方式去解决问题
这种方式的对齐方式运算肯定是错误的,所以我们不能从索引为0开始
所以我们应该从两个字符串的最后一个索引开始,这样才能确定最后结果的准确性
int i=num1.length()-1;//字符串num1的最后一位的索引
int j=num2.length()-1;//字符串的num2的最后一位的索引
int carry=0;//进位数
while(i>=0||j>=0){
}
对于字符串,两个字符串的长度有的时候是不一样的,所以我们肯定要对长度短的字符串进行操作,补位,但是直接操作字符串肯定会对算法的性能进行损耗,所以我们在处理的时候做一点小小的改变
int a=i>=0?(num1.charAt(i--)-'0'):0;
int b=j>=0?(num2.charAt(j--)-'0'):0;
int num=a+b+carry;
carry=num/10;
int c=num%10;
sb.append(c);
所以我们最后将字符串反转就可以得到最后的结果
源码如下:
public String addStrings(String num1, String num2) {
StringBuilder sb=new StringBuilder();
int i=num1.length()-1;
int j=num2.length()-1;
int carry=0;
while(i>=0||j>=0){
int a=i>=0?(num1.charAt(i--)-'0'):0;
int b=j>=0?(num2.charAt(j--)-'0'):0;
int num=a+b+carry;
carry=num/10;
int c=num%10;
sb.append(c);
}
if(carry==1){
sb.append(carry);
}
return sb.reverse().toString();
}