您的位置:首页 > 其它

[LeetCode] 415. Add Strings 解题报告

2017-02-13 08:08 330 查看
Given two non-negative integers
num1
and
num2
represented
as string, return the sum of
num1
and
num2
.

Note:

The length of both
num1
and
num2
is
< 5100.
Both
num1
and
num2
contains
only digits
0-9
.
Both
num1
and
num2
does
not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.

这一题非常简单,记得前面有个和这个类似的题,大概是100号以前。
我的方法就是从右往左算,如果算完,直接把较长的字符串复制下来即可。另外,使用一个boolean变量控制进位就好。
我用的char型数组,主要考虑效率问题,直接String字符串是效率非常低的。

private static final char ZERO = '0';
public String addStrings(String num1, String num2) {
if (num1.length() == 0 || num2.length() == 0) {
return num1.length() == 0 ? num1 : num2;
}
char[] cArr1 = num1.length() >= num2.length() ? num1.toCharArray() : num2.toCharArray();
char[] cArr2 = num1.length() < num2.length() ? num1.toCharArray() : num2.toCharArray();
int nCount = 0;
int nMinLength = cArr2.length;
int nMaxLength = cArr1.length;

char[] cArrResult = new char[nMaxLength + 1];
boolean bUpDigit = false;
while (nCount < nMaxLength) {
char c1 = cArr1[cArr1.length - nCount - 1];
char c2 = nCount < nMinLength ? cArr2[cArr2.length - nCount - 1] : ZERO;
int nCurrentDigit = (int) (c1 - ZERO) + (int) (c2 - ZERO);
nCurrentDigit = bUpDigit ? nCurrentDigit + 1 : nCurrentDigit;
bUpDigit = false;
if (nCurrentDigit > 9) {
bUpDigit = true;
nCurrentDigit -= 10;
}
cArrResult[cArrResult.length - nCount - 1] = (char) (nCurrentDigit + ZERO);
nCount++;
}
String strResult = String.valueOf(cArrResult).substring(1);
return bUpDigit ? 1 + strResult : strResult;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string