leetcode_67 二进制求和

100 阅读1分钟

要求

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

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

示例 2:

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

核心代码

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

另一解法

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        a = list(a)
        for index,item in enumerate(a):
            a[index] = int(item)
        b = list(b)
        for index,item in enumerate(b):
            b[index] = int(item)
        
        la = len(a)
        lb = len(b)

        if la < lb:
            a,b = b,a
            la,lb = lb,la

        a = a[::-1]
        b = b[::-1]
        
        for i in range(0,lb):
            a[i] += b[i]
        
        for i in range(0,la):
            while a[i] >= 2:
                a[i] -= 2
                if i != la - 1:
                    a[i + 1] += 1
                else:
                    a.append(1)
                    la += 1
        res = ""
        for item in a[::-1]:
            res += str(item)
        return res

image.png

解题思路:第一种解法:直接使用int(str,2)bin方法完成二进制的计算,python做的比较简单;第二种解法:使用字符串,不断的需要考虑进位的问题,相对来说较为繁琐。