2020.8.3 力扣每日

1 class Solution { 2 public String addStrings(String num1, String num2) { 3 StringBuilder res = new StringBuilder(); 4 int len1 = num1.length() - 1, len2 = num2.length() - 1, add = 0; 5 while (len1 >= 0 || len2 >= 0){ 6 int n1 = len1 >= 0 ? num1.charAt(len1) - '0' : 0; 7 int n2 = len2 >= 0 ? num2.charAt(len2) - '0' : 0; 8 int tmp = n1 + n2 + add; //计算结果 9 add = tmp / 10; //进位符 10 res.append(tmp % 10); 11 --len1; 12 --len2; 13 } 14 if (add == 1) //处理最后个进位 15 res.append(1); 16 return res.reverse().toString(); 17 } 18 }
解题思路:
题目要求不能直接转换整个字符串为整数,所以我们模拟竖式计算,按位相加,实现两数相加。
注意点:
- 由于按位相加需从个位开始,即字符串中最后一位开始。
- 按位相加时需注意进位符add
- 最后处理完字符串,仍需关注是否存在进位,存在则在结果字符串添加1。
- 由于最终计算结果是逆向的,所以使用reverse将字符串翻转。
时间复杂度:O(N),N为字符串长度
空间复杂度:O(1)

浙公网安备 33010602011771号