leetcode第415题,字符串相加。采用字符串处理方式来完成。

LeetCode 415字符串相加

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

1输入:num1 = "11", num2 = "123"
2输出:"134"

示例 2:

1输入:num1 = "456", num2 = "77"
2输出:"533"

示例 3:

1输入:num1 = "0", num2 = "0"
2输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1num2 都只包含数字 0-9
  • num1num2 都不包含任何前导零

思路

我们需要通过提出字符串中字符的数值,具体操作是减去'0'

 1'0' - '0' = 0
 2'1' - '0' = 1
 3'2' - '0' = 2
 4'3' - '0' = 3
 5'4' - '0' = 4
 6'5' - '0' = 5
 7'6' - '0' = 6
 8'7' - '0' = 7
 9'8' - '0' = 8
10'9' - '0' = 9

然后通过一个进位数来控制最终的值

1//进位数的计算
2//carryFlag开始的值为0
3carryFlag = (num1[i] + num2[j] + carryFlag) / 10;

最终通过计算得出一个逆序值,再次转为正向然后转化为字符串的形式即可。

解题

 1class Solution {
 2    public String addStrings(String num1, String num2) {
 3        //java字符串拼接
 4        StringBuilder sb = new StringBuilder();
 5        //进位变量,初始值为0
 6        int carryFlag = 0;
 7        for(int i = num1.length() - 1, j = num2.length() - 1;
 8            i >= 0 || j >= 0 || carryFlag != 0;
 9            i--, j--)
10        {
11            int numChar1 = (i >= 0 ? num1.charAt(i) - '0' : 0);
12            int numChar2 = (j >= 0 ? num2.charAt(j) - '0' : 0);
13            //计算新的位数和数值
14            sb.append((numChar1 + numChar2 + carryFlag) % 10);
15            carryFlag = (numChar1 + numChar2 + carryFlag) / 10;
16        }
17        return sb.reverse().toString();
18    }
19}