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)

posted @ 2020-08-03 21:44  小小码农-安  阅读(224)  评论(0)    收藏  举报