LeetCode刷題之路:67. 二進位制求和

Super灬Dan發表於2020-12-31

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

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

示例 1:

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

輸入: a = “1010”, b = “1011”
輸出: “10101”

提示:

每個字串僅由字元 ‘0’ 或 ‘1’ 組成。
1 <= a.length, b.length <= 10^4
字串如果不是 “0” ,就都不含前導零。

#最直觀的思路
設flag為進位標誌,若有進位則flag=1,反之則為0
隨後在while裡倒序遍歷兩個字串
while裡面前兩句是判斷一下字串是否已遍歷完畢,如果遍歷完畢,則直接賦予個0值
隨後用兩個值相加並且加上flag值
如果大於等於2,則代表有進位,將c進行取餘操作,並且將進位符置為1
隨後將c值插入到ans的首位
迴圈此過程直到兩個字串都遍歷完畢
最後判斷flag是否等於1,等於1的話則需要在首位補一個1

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        flag = 0
        i = 0
        ans = []
        while len(a)-1-i >=0 or len(b)-1-i >= 0:
            a_value = int(a[len(a)-1-i]) if len(a)-1-i >= 0 else 0
            b_value = int(b[len(b)-1-i]) if len(b)-1-i >= 0 else 0
            # print(a_value, b_value)
            c = a_value + b_value + flag
            if c >= 2:
                c = c%2
                flag = 1
            else:
                flag = 0
            ans.insert(0, c)
            i += 1
        if flag == 1:
            ans.insert(0, 1)
        ans = ''.join('%s' %id for id in ans)
        return ans

#超簡潔的方法
利用python中的2進位制操作
直接進行2進位制相加

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        return '{:b}'.format(int(a, 2) + int(b, 2))

相關文章