题意不允许使用BigInteger或者BigDecimal来存储两数和,要不还是比较简单的,而使用Integer或者Long来存储两数和,则测试数据会发生溢出。
思路:小学的竖式加法,按位相加,每次记录下进位和余数,进位计算【指针指向的个位数相加除以10】,余数计算【个位数相加+进位和】。用StringBuffer记录每一次的余数,最后反转。
注意点:两数一长一短的情况,必定有一个数先加完,此时为避免指针索引溢出,因此赋值为0.直到两数“加完”。为方便理解,自己可以先在纸上验算一遍竖式加法。
num1.charAt(i)-'0' 字符‘0’的ascil码为48,字符‘1’的ascil码为49,后面的数依次递增
class Solution {
public String addStrings(String num1, String num2) {
//指针指向两数尾部
int i=num1.length()-1;
int j=num2.length()-1;
int add=0;
StringBuffer res = new StringBuffer("");
//循环条件:数一或数二的个位数未全部参数运算或进位和大于0
while(i>=0||j>=0||add>0)
{
int x=i>0?num1.charAt(i)-'0':0;
int y=j>0?num2.charAt(j)-'0':0;
int result = x+y+add;
add=result/10;
res.append(result%10);
i--;
j--;
}
return res.reverse().toString();
}
}