image.png
方法:双指针法
用tmp记录指针指向的每一位数的和
如果有进位用carry记录
将每一位计算的结果添加到可变字符串res中
如果指针遍历完毕之后仍有进位carry,则再将进位添加到res
最后反转res字符串得到两字符串之和
public String addStrings(String nums1,String nums2){
//res = 对应两个数计算后的值
StringBuilder res = new StringBuilder("");
int i = nums1.length()-1, j = nums2.length()-1;
//tmp表示,指针指向的相对两个数组的两个数的和=n1.value+n2.value+carry
//carry = 进位值(0或1)
int carry=0;
while (i>=0 || j>=0){
int n1 =i >=0 ? nums1.charAt(i)-'0':0;
int n2 =j >=0 ? nums2.charAt(j)-'0':0;
int tmp = n1+n2+carry;
carry = tmp/10;
res.append(tmp%10);
i--;
j--;
}
if (carry==1){
res.append(1);
}
return res.reverse().toString();
}
时间复杂度O(N)
空间复杂度O(S)