大概是那个面试题吧,就是也许两个数相加,陷阱就是可能那个数就贼大,也许远远超过int或者long
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
自己的想法有几个疏漏:
if (num1.length() >= num2.length()) { bigStr = num1; smallStr = num2; } else { bigStr = num2; smallStr = num1; }
这样比较好些。。
大神简洁实用做法:
public String addStrings(String num1, String num2) {
int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
String res = "";
while (i >= 0 || j >= 0) {
if (i >= 0)
carry += num1.charAt(i--) - '0';
if (j >= 0)
carry += num2.charAt(j--) - '0';//既然是相加,那么用结果一个再加另一个也是完全可以的吧
res = Integer.toString(carry % 10) + res;
carry /= 10;
}
return carry != 0 ? "1" + res : res;//直接用字符串的相加特性,非常巧妙
}
//0316复习