2025年--Lc208- 415. 字符串相加(双指针)--Java版
1.题目

2.思路
双指针i,j分别指向nums1、nums2的末尾。
(1)当前位:i+j+carry
(2)进位:carry=tmp/10
(3)索引溢出处理: 当i或j 走过数字首部后,给 n1,n2 赋值为 0,相当于给 num1,num2 中长度较短的数字前面填 0,以便后续计算。
(4)当遍历完 num1,num2 后跳出循环,并根据 carry 值决定是否在头部添加进位 1,最终返回 res 即可。
3.代码实现
class Solution {public String addStrings(String num1, String num2) {int i=num1.length()-1;//num1最后一位int j=num2.length()-1;;//num2最后一位int carry=0;//进位StringBuilder sb=new StringBuilder();while(i>=0||j>=0){int n1=0,n2=0;if(i>=0){//字符转数字:- '0',例如 '7' - '0' == 7、'3' - '0' == 3。n1=num1.charAt(i)-'0';}else//此事nums1的索引是负数,说明nums1较短,补0{n1=0;}if(j>=0){n2=num2.charAt(j)-'0';}else//此事nums2的索引是负数,说明nums2较短,补0{n2=0;}//竖式相加int tmp=n1+n2+carry;carry=tmp/10;//进位比如相加等于23,23/10=2,所以用除法取2,进2sb.append(tmp%10);//比如是23,23%10=3,所以当前位是3,进位是2i--;j--;}if(carry==1)//nums1和nums2遍历完,还有进位{sb.append(1);}return sb.reverse().toString(); }
}
