【LeetCode 簡單題】94-字串相加
阿新 • • 發佈:2018-11-19
宣告:
今天是第94道題。給定兩個字串形式的非負整數 num1
和num2
,計算它們的和。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定兩個字串形式的非負整數 num1
和num2
,計算它們的和。
注意:
num1
和num2
的長度都小於5100.num1
和num2
都只包含數字0-9
.num1
num2
都不包含任何前導零。- 你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字串轉換為整數形式。
解法1。採取從最低位逐位相加的方式,同時遍歷2個字串,記錄進位情況,下面這版程式碼還是挺簡潔的,如下。
執行用時: 68 ms, 在Add Strings的Python3提交中擊敗了73.73% 的使用者
class Solution: def addStrings(self, num1, num2): """ :type num1: str :type num2: str :rtype: str """ i = len(num1) - 1 j = len(num2) - 1 res = '' carry = 0 while i >= 0 or j >= 0: if i >= 0: carry += int(num1[i]) if j >= 0: carry += int(num2[j]) res += str(carry%10) carry //= 10 i -= 1 # 注意以下這2步不能少哦 j -= 1 if carry == 1: res += '1' return res[::-1]
解法2。還有種比較傻的方法,也很慢,但可以滿足題目要求,就是先各自把str逐位轉化為十進位制數,在相加後轉為str,程式碼如下。
執行用時: 116 ms, 在Add Strings的Python3提交中擊敗了15.18% 的使用者
class Solution: def addStrings(self, num1, num2): """ :type num1: str :type num2: str :rtype: str """ t1 = 0 for i in num1: t1 *= 10 t1 += ord(i) - ord('0') t2 = 0 for i in num2: t2 *= 10 t2 += ord(i) - ord('0') return str(t1+t2)
結尾
解法1:https://www.polarxiong.com/archives/LeetCode-415-add-strings.html
解法2:LeetCode
備註:
- eval() 函式用來執行一個字串表示式,並返回表示式的值。
- 如:eval(str) = int
- 如:x=7,eval( '3 * x' )