415. 字符串相加

转载自Leet Code

题目描述

给定两个字符串形式的非负整数 num1num2 ,计算它们的和。

提示: - num1num2 的长度都小于 5100 - num1num2 都只包含数字 0-9 - num1num2 都不包含任何前导零 - 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式


我的代码

\(T(M,N) = O(max(M,N))\), \(S(M,N) = O(max(M,N))\)

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class MySolution415 
{
public String addStrings(String num1, String num2)
{
if (num1==null||num1.length()<=0) return num2;
if (num2==null||num2.length()<=0) return num1;

int i = num1.length()-1; int j = num2.length()-1;
int add = 0;
StringBuilder sb = new StringBuilder();

for (; i>=0&&j>=0; i--,j--)
{
int a1 = (int)num1.charAt(i)-48;
int a2 = (int)num2.charAt(j)-48;

int sum = (a1+a2+add)%10;
add = (a1+a2+add)/10;
sb.append(sum);
}
while(i>=0)
{
int a = (int)num1.charAt(i--)-48;
int sum = (a+add)%10;
add = (a+add)/10;
sb.append(sum);
}
while(j>=0)
{
int a = (int)num2.charAt(j--)-48;
int sum = (a+add)%10;
add = (a+add)/10;
sb.append(sum);
}
if (add!=0) sb.append(add);
return sb.reverse().toString();
}
}