415. 字符串相加
https://leetcode-cn.com/problems/add-strings/
思路: 分别遍历个位,十位,百位等等,每位加和,如果超过10,则进位保留,下一次加在高位上
- 遍历终止条件:两字符串最大长度-1
- 注意事项:遍历结束,如果仍然有进位,记得把最后一位给加上
- 结果通过StringBuilder倒序拼接,最后再反转即可
package com.shangguigu.dachang.algrithm.A03_Strings;
/**
* @author : 不二
* @date : 2022/4/8-上午8:15
* @desc : 415. 字符串相加
* https://leetcode-cn.com/problems/add-strings/
*
*
**/
public class A30_addStrings {
public static void main(String[] args) {
String num1 = "1", num2 = "9";
String s = addStrings(num1, num2);
System.out.println("结果是:" + s);
}
public static String addStrings(String num1, String num2) {
int l1 = num1.length()-1;
int l2 = num2.length()-1;
// 遍历位数,哪个位数多,就按照多的位数个数进行遍历
// 从个位开始遍历
int step = Math.max(l1, l2);
StringBuilder builder = new StringBuilder();
// 这个是进位
int carry = 0;
for (int i = step; i >= 0; i--) {
// 最高位是:
int l1Pos = i - (step-l1);
System.out.println(l1Pos);
int c1 = 0;
if (l1Pos >= 0) {
c1 = num1.charAt(l1Pos) - '0';
}
int l2Pos = i - (step - l2);
System.out.println(l2Pos);
int c2 = 0;
if (l2Pos >= 0) {
c2 = num2.charAt(l2Pos) - '0';
}
int tmp = c1 + c2;
// 如果前面的进位不为0, 则需要添加到tmp上,方便追加
if (carry != 0) {
tmp += carry;
}
builder.append(tmp % 10);
carry = tmp / 10;
}
// 遍历完之后,如果还有进位,则需要单独进位
if (carry != 0) {
builder.append(carry);
}
return builder.reverse().toString();
}
}