Given two non-negative integers num1
and num2
represented as string, return the sum of num1
and num2
.
Note:
- The length of both
num1
andnum2
is < 5100. - Both
num1
andnum2
contains only digits0-9
. - Both
num1
andnum2
does not contain any leading zero. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
Subscribe to see which companies asked this question.
思路,一个进位记录每位的进位,计算每一位的数并加在result后面,最后再逆置result即为结果,
public class Solution {
// 长整数相加
public String addStrings(String num1, String num2) {
StringBuilder result =new StringBuilder();
int jinwei = 0;
if (num1.length() < num2.length()) {
String temp = num1;
num1 = num2;
num2 = temp;
}
int i = num1.length() - 1;
int j = num2.length() - 1;
while (j >= 0) {
result.append((num1.charAt(i) - '0' + num2.charAt(j) - '0' + jinwei) % 10);
jinwei = (num1.charAt(i) - '0' + num2.charAt(j) - '0' + jinwei) / 10;
i--;
j--;
}
if (jinwei > 0) {
while (i >= 0) {
result.append((num1.charAt(i) - '0' + jinwei) % 10);
jinwei = (num1.charAt(i) - '0' + jinwei) / 10;
i--;
}
} else {
while (i >= 0) {
result.append(num1.charAt(i));
i--;
}
}
if (jinwei > 0) {
result.append(jinwei);
}
return result.reverse().toString();
}
}
诶,写了那么多,人家用8行就写完了:
public class Solution {
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int carry = 0;
for(int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0 || carry == 1; i--, j--){
int x = i < 0 ? 0 : num1.charAt(i) - '0';
int y = j < 0 ? 0 : num2.charAt(j) - '0';
sb.append((x + y + carry) % 10);
carry = (x + y + carry) / 10;
}
return sb.reverse().toString();
}
}
代码简洁性还加强呀!!!