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(); } }
之前是先用String result,然后再在计算时result加上每位,再最后用新建一个stringbuilder对象用于逆置字符串,但是这样耗费时间长好多呀。诶,写了那么多,人家用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(); } }
代码简洁性还加强呀!!!