[LeetCode] 415. Add Strings 解题报告

来源:互联网 发布:2016中国对外投资数据 编辑:程序博客网 时间:2024/06/17 08:05

Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.

Note:

  1. The length of both num1 and num2 is < 5100.
  2. Both num1 and num2 contains only digits 0-9.
  3. Both num1 and num2 does not contain any leading zero.
  4. 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;}


0 0
原创粉丝点击