1、从后往前遍历两个字符串
2、用字符串来保存加法的值,target保存进位
要注意边界条件,给出的字符串均比较大,所以不能用数字型保存
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int target = 0;
char[] cArray1 = num1.toCharArray();
char[] cArray2 = num2.toCharArray();
int index1 = cArray1.length - 1;
int index2 = cArray2.length - 1;
while (index1 >= 0 || index2 >= 0){
int number1 = index1 >= 0 ? cArray1[index1--] - 48 : 0;
int number2 = index2 >= 0 ? cArray2[index2--] - 48 : 0;
int sum = number1 + number2 + target;
target = sum / 10;
sb.insert(0,sum % 10);
}
if (target == 1){
sb.insert(0,1);
}
return sb.toString();
}
上面的算法改为append,最后reverse能快2ms
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int target = 0;
char[] cArray1 = num1.toCharArray();
char[] cArray2 = num2.toCharArray();
int index1 = cArray1.length - 1;
int index2 = cArray2.length - 1;
while (index1 >= 0 || index2 >= 0){
int number1 = index1 >= 0 ? cArray1[index1--] - 48 : 0;
int number2 = index2 >= 0 ? cArray2[index2--] - 48 : 0;
int sum = number1 + number2 + target;
target = sum / 10;
sb.append(sum % 10);
}
if (target == 1){
sb.append(1);
}
sb.reverse();
return sb.toString();
}