1. 程式人生 > >leetcode-67. 二進位制求和

leetcode-67. 二進位制求和

一、問題描述

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字 1 和 0

示例 1:

輸入: a = "11", b = "1"
輸出: "100"

示例 2:

輸入: a = "1010", b = "1011"
輸出: "10101"

二、程式碼和思路

1.首先記錄兩個字串長度的大小,取長度大的字串為c,並建立一個空列表用來儲存沒對應位二進位制相加的結果

2.從後往前遍歷兩個字串直到遍歷完其中一個字串為止,用二進位制加法並將結果儲存到lst中,必要的話改變標誌位flag

3.從後往前從lst中取元素,用str的加法結合所有元素返回

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        m,n=len(a),len(b)
        lst=[]
        c=a if m>n else b
        i=-1
        j=-min(m,n)
        flag=0
        while i>=j:            
            if a[i]=='1' and b[i]=='1':
                lst.append(flag)
                flag=1
            elif (a[i]=='1' and b[i]=='0') or (b[i]=='1' and a[i]=='0'):
                lst.append(abs(flag-1))
            else:
                lst.append(flag)
                flag=0
            i -= 1
        while i>=-len(c):
            if c[i]=='1':
                lst.append(abs(flag-1))
            else:
                lst.append(flag)
                flag=0
            i -= 1    
        if flag==1:lst.append(flag)
        return_str=''
        for i in range(len(lst)-1,-1,-1):
            return_str += str(lst[i])
        return return_str

三、執行結果