给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
来源:力扣(LeetCode)
链接:https://dev.lingkou.xyz/problems/add-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder s = new StringBuilder();
char[] ch1,ch2;
if(num1.length() > num2.length()) {
ch1 = num1.toCharArray();
ch2 = num2.toCharArray();
}
else {
ch1 = num2.toCharArray();
ch2 = num1.toCharArray();
}
int n = 0;
int j = ch1.length-ch2.length;
for(int i = ch2.length-1; i >= 0; i--){
int sum = n + CtoInt(ch1[i+j]) + CtoInt(ch2[i]);
s.append(sum%10);
n = (sum)/10;
}
int i = 0;
for(i = ch1.length-1-ch2.length; i >=0; i--){
if(n == 0) break;
int sum = n + CtoInt(ch1[i]);
s.append(sum%10);
n = (sum)/10;
}
for(;i >= 0; i--) {
s.append(ch1[i]);
}
if(n != 0) s.append(n);
s.reverse();
return s.toString();
}
public int CtoInt(char c) {
if(c == '0') return 0;
else if(c == '1') return 1;
else if(c == '2') return 2;
else if(c == '3') return 3;
else if(c == '4') return 4;
else if(c == '5') return 5;
else if(c == '6') return 6;
else if(c == '7') return 7;
else if(c == '8') return 8;
return 9;
}
}
代码简化后
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder s = new StringBuilder();
char[] ch1 = num1.toCharArray();
char[] ch2 = num2.toCharArray();
int carry = 0, i = num1.length()-1, j = num2.length()-1;
while(i >= 0 || j >= 0 || carry != 0){
if(i>=0) carry += ch1[i--]-'0';
if(j>=0) carry += ch2[j--]-'0';
s.append(carry%10);
carry /= 10;
}
s.reverse();
return s.toString();
}
}