1. 程式人生 > 實用技巧 >2020.8.3 力扣每日

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)