LeetCode 415字符串相加
300 Words|Read in about 2 Min|本文总阅读量次
leetcode第415题,字符串相加。采用字符串处理方式来完成。
LeetCode 415字符串相加
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 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
num1
和num2
都只包含数字0-9
num1
和num2
都不包含任何前导零
思路
我们需要通过提出字符串中字符的数值,具体操作是减去'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}