题目描述:
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
注意:
num1
和num2
的长度都小于 5100.num1
和num2
都只包含数字0-9
.num1
和num2
都不包含任何前导零。- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解题思路:
- 先把两个字符串反转,然后变成相同长度(在短的字符串后面加 ”0“)。
- 从左到右给两个统一字符串上的字符求和(先变成整数,再求和)。创建一个int变量,存放求和后需要进位的数。
- 求和后的数字,减去10,然后存放在一个新字符串中。
- 反转新字符串,并返回该字符串。
代码实现:
class Solution {
public String addStrings(String num1, String num2) {
if (num1 == null || num1.equals("0")) {
return num2;
}else if (num2 == null || num2.equals("0")) {
return num1;
}
StringBuffer s1 = new StringBuffer(num1);
StringBuffer s2 = new StringBuffer(num2);
s1.reverse();
s2.reverse();
if (s1.length() > s2.length()) {
for (int i = s2.length(); i < s1.length(); i++) {
s2.append("0");
}
}else if (s1.length() < s2.length()) {
for (int i = s1.length(); i < s2.length(); i++) {
s1.append("0");
}
}
int flag = 0;
StringBuffer str = new StringBuffer("");
for (int i = 0; i < s1.length(); i++) {
int value1 = s1.charAt(i) - '0';
int value2 = s2.charAt(i) - '0';
int value = flag + value1 + value2;
if (value >= 10) {
flag = 1;
value = value - 10;
str.append(value);
}else {
str.append(value);
flag = 0;
}
}
if (flag != 0) {
str.append(flag);
}
str.reverse();
return str.toString();
}
}