[LeetCode] 415. Add Strings 解题报告

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;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值