给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
注意:
num1
和num2
的长度都小于 5100.
num1
和num2
都只包含数字 0-9
.
num1
和num2
都不包含任何前导零。
- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
使用两个指针从字符串尾部开始依次相加,同时维护进位位。使用 StringBuffer 存储,最后再将结果翻转。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public String addStrings(String num1, String num2) { int i = num1.length() - 1, j = num2.length() - 1; int carry = 0; StringBuffer sb = new StringBuffer(); while(i >= 0 || j >= 0 || carry == 1){ int x = i >= 0 ? num1.charAt(i--) - '0' : 0; int y = j >= 0 ? num2.charAt(j--) - '0' : 0; int num = x + y + carry; carry = num / 10; sb.append(num % 10); } return sb.reverse().toString(); } }
|
时间复杂度O(max(len1, len2)),len1 和 len2 为两个字符串的长度。
空间复杂度O(1),除了存储答案的空间,只使用了O(1)的空间。