給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。解題思路:本題我們只需要對兩個大整數模擬「豎式加法」的過程。對應位置的兩個整數相加之後,如果當前位和超過 10,則向高位進一位。
我們定義兩個指標 i 和 j 分別指向 num1和 num2 的末尾,即最低位,同時定義乙個變數 add 維護當前是否有進製。
①當兩個數字數相同時,當最後一位相加完畢後(也就是指標等於 -1 時)沒有進製,那麼此時相加操作完成。
②若兩個數字數不相同,並且其中乙個字串的指標 i 已經指向-1,那麼在另外乙個字串的指標 j 還未指向 -1 時,把字串i當前的位置進行補 0 操作。當 i 和 j 都指向 -1 ,檢視有無進製,若沒有進製,相加操作結束,若有,再迴圈一次結束。
每次計算好一位的值就把它 push_back 到 ans 字串中,等計算結束再執行reverse操作。
綜上所述我們的迴圈結束條件應當是:
while (i >= 0 || j >= 0 || add != 0)
**如下:
時間複雜度:o(max(len1,len2))
空間複雜度:o(1)
#include#include#includeusing namespace std;
string addstrings(string num1,string num2)
reverse(ans.begin(),ans.end());
return ans;
} int main()
reverse(ans.begin(),ans.end());
return ans;
} string multiply(string num1,string num2)
if(add != 0)
reverse(cur.begin(),cur.end());
ans = addstrings(ans,cur);
} return ans;
} int main()
Leetcode 字串相加與字串相減
題目描述2 注意事項 給定兩個字串形式的非負整數 num1 和num2 計算它們的和。示例 輸入 string s1 12 string s2 28 輸出string s3 40 這個題最容易想到的做法就是將字串直接轉換成數字進行相加,然後將相加和轉為字串返回,但是兩個字串直接轉為數字是很容易溢位的...
字串相加
題目 給定兩個字串形式的非負整數num1和num2,計算它們的和。注意 num1和num2的長度都小於 5100.num1和num2都只包含數字0 9.num1和num2都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式 分析 注意幾個方面 1 迴...
字串相加
給定兩個字串形式的非負整數 num1 和num2 計算它們的和。注意 num1 和num2 的長度都小於 5100.num1 和num2 都只包含數字 0 9.num1 和num2 都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式。分析雙指標分別...