1. 程式人生 > 其它 >2021-01-03 | 415. 字串相加

2021-01-03 | 415. 字串相加

技術標籤:2021 LeetCode每日一題字串資料結構演算法leetcodeJavaScript

1. 題目描述

給定兩個字串形式的非負整數 num1num2 ,計算它們的和。

提示:

  1. num1num2 的長度都小於 5100
  2. num1num2 都只包含數字 0-9
  3. num1num2 都不包含任何前導零
  4. 你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字串轉換為整數形式

2. 解題思路

這裡我們模擬豎式加法,遍歷兩個字串,從個位開始將兩個數相加。定義一個temp來儲存兩個數的和。將temp與10取餘,得到的值加在結果res中,如果有進位,就將temp賦值為1,方便前面的位相加。最後判斷相加完之後,temp是否等於1,如果是就進一位,在結果前面加一個1。

複雜度分析:

  • 時間複雜度: O(max(len1, len2)),其中len1和len2分別是num1和num2的長度,豎式加法的次數取決於較大數的位數。
  • 空間複雜度: O(1),除答案外只需要常數空間存放若干變數。

3. 程式碼實現

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var addStrings = function(num1, num2) {
    let len1 = num1.length, len2 = num2.length, temp = 0, res = ""
; while(len1 || len2){ if(len1){ temp += +num1[--len1] } if(len2){ temp += +num2[--len2] } res = temp % 10 + res temp > 9 ? temp = 1 : temp = 0 } if(temp){ res = 1 + res } return res };

4. 提交結果

在這裡插入圖片描述