1. 程式人生 > >【LeetCode 簡單題】94-字串相加

【LeetCode 簡單題】94-字串相加

宣告:

今天是第94道題。給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。

注意:

  1. num1 和num2 的長度都小於5100.
  2. num1 和num2 都只包含數字 0-9.
  3. num1
     和num2 都不包含任何前導零。
  4. 你不能使用任何內建 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' )