2021-01-03 | 415. 字串相加
阿新 • • 發佈:2021-01-09
技術標籤:2021 LeetCode每日一題字串資料結構演算法leetcodeJavaScript
1. 題目描述
給定兩個字串形式的非負整數 num1
和num2
,計算它們的和。
提示:
num1
和num2
的長度都小於 5100num1
和num2
都只包含數字0-9
num1
和num2
都不包含任何前導零- 你不能使用任何內建 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
};