题目描述
解题分析
题目要求不能直接把字符串转为数字,那么只能对其中的字符进行操作了,思路是分别从最低位开始累加,用临时变量保存进位,最后不能忘记对i==0时的特殊处理(若需要变长),字符转int的最简单的方式就是把char值与‘0’作差,这个偏移值就是目标值的大小。总体思路和之前的数组求和大同小异。其中采用StringBuilder来保存结果,最后需要反转。如果在移动过程中num2的下标小于0了,那么就不需要再加上它,这里是需要加上判断的。
代码实现
class Solution {
public String addStrings(String num1, String num2) {
if (num1.length()<num2.length()) {
String temp = num1;
num1 = num2;
num2 = temp;
}
int i = num1.length()-1;
int temp=0;
StringBuilder res = new StringBuilder();
while (i>=0) {
if (i == 0) {
int sum = 0;
if (num1.length() == num2.length()) {
sum = num1.charAt(i) - '0' + num2.charAt(i) - '0' + temp;
} else {
sum = num1.charAt(i) - '0' + temp;
}
if (sum >= 10) {
res.append(sum % 10);
res.append(sum / 10);
break;
} else {
}
}
int a = num1.charAt(i) - '0';
int b = 0;
if (num2.length() - num1.length() + i >= 0) {
b = num2.charAt(num2.length() - num1.length() + i) - '0';
}
int sum = a + b + temp;
res.append(sum % 10);
temp = sum / 10;
i--;
}
if (res.equals("")) {
res = res.append("0");
}
return new String(res.reverse());
}
}