67. 二進(jìn)制相加(Python)

更多題目移步【力扣簡單題】

題目

難度:★☆☆☆☆
類型:數(shù)組

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

輸入為非空字符串且只包含數(shù)字 1 和 0。

示例

示例 1:

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

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

解答

本題相當(dāng)于實現(xiàn):

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        return bin(int(a,2)+int(b,2))[2:]

這里,我們將兩個字符串轉(zhuǎn)為相同長度,然后直接進(jìn)行字符串相加。

class Solution:
    def addBinary(self, a: str, b: str) -> str:

        # 短字符串前端補零,保證兩者長度相等
        if len(a) > len(b):
            b = '0'* (len(a)-len(b)) + b
        elif len(a) < len(b):
            a = '0'* (len(b) - len(a)) + a

        res, carry = '', '0'
        for a_, b_ in reversed(list(zip(a, b))):
    
            if a_ == '0' and b_ == '0':                                 # 當(dāng)前位兩個數(shù)都是0
                r = carry
                carry = '0'
            elif a_ == '1' and b_ == '0' or a_ == '0' and b_ == '1':    # 當(dāng)前位兩個數(shù)不同
                r = '1' if carry == '0' else '0'
                carry = '1' if carry == '1' else '0'
            else:                                                       # 當(dāng)前位兩個數(shù)都是1
                r = '1' if carry == '1' else '0'
                carry = '1'

            res = r + res

        if carry == '1':                                                # 如果還有進(jìn)位
            res = '1' + res
            
        return res

如有疑問或建議,歡迎評論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容