67. 二进制相加(Python)

更多题目移步【力扣简单题】

题目

难度:★☆☆☆☆
类型:数组

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

输入为非空字符串且只包含数字 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:

        # 短字符串前端补零,保证两者长度相等
        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':                                 # 当前位两个数都是0
                r = carry
                carry = '0'
            elif a_ == '1' and b_ == '0' or a_ == '0' and b_ == '1':    # 当前位两个数不同
                r = '1' if carry == '0' else '0'
                carry = '1' if carry == '1' else '0'
            else:                                                       # 当前位两个数都是1
                r = '1' if carry == '1' else '0'
                carry = '1'

            res = r + res

        if carry == '1':                                                # 如果还有进位
            res = '1' + res
            
        return res

如有疑问或建议,欢迎评论区留言~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容