LeetCode 415. 字符串相加
题目链接
题目分析
这个题是个简单题,但是代码的写法可以有很多种。最基本的就是双指针同步去进行各位相加,然后用新的循环把多出来的那个数的剩余部分计算完。
这样写的话代码会比较复杂,我们可以把这里合成一个循环,直到所有条件都不符合了才结束,这里所说的条件是以下三个
- 字符串1长度结束
- 字符串2长度结束
- 进位为0
这样写的话代码会精简非常非常多。
代码实现
实现一
class Solution {
public String addStrings(String num1, String num2) {
int sum = 0;
char[] str1 = num1.toCharArray();
char[] str2 = num2.toCharArray();
int i = str1.length - 1;
int j = str2.length - 1;
int count = 0;
StringBuffer sb = new StringBuffer();
while(i >= 0 && j >= 0){
sb.append((((str1[i] - '0' + str2[j] - '0')) + count) % 10);
if((str1[i] - '0' + str2[j] - '0' + count) >= 10){
count = 1;
}else{
count = 0;
}
i--;
j--;
}
while(i >= 0){
sb.append((str1[i] - '0' + count) % 10);
if(str1[i] - '0' + count >= 10){
count = 1;
}else{
count = 0;
}
i--;
}
while(j >= 0){
sb.append((str2[j] - '0' + count) % 10);
if(str2[j] - '0' + count >= 10){
count = 1;
}else{
count = 0;
}
j--;
}
if(count == 1){
sb.append('1');
}
return sb.reverse().toString();
}
}
实现二
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int carry = 0, i = num1.length()-1, j = num2.length()-1;
while(i >= 0 || j >= 0 || carry != 0){
if(i>=0) carry += num1.charAt(i--)-'0';
if(j>=0) carry += num2.charAt(j--)-'0';
sb.append(carry%10);
carry /= 10;
}
return sb.reverse().toString();
}
}