[LeetCode]67、二进制求和

题目描述

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

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

示例 1:

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

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

思路解析

模拟二进制累加
注意进位
二进制相加也可以利用位运算
异或代表两个数不进位的相加
与操作左移一位,表示进位,继续累加,直到出现0

class Solution:
    
    def addBinary(self, a, b):
        '''
        考虑进位的方式
        :param a:
        :param b:
        :return:
        '''
        res = []
        i = len(a) - 1
        j = len(b) - 1
        sums = 0
        while i >= 0 or j >= 0:
            if i >= 0:
                sums += ord(a[i]) - ord("0")
                i -= 1
            if j >= 0:
                sums += ord(b[j]) - ord("0")
                j -= 1
            res.append(str(sums%2))
            sums //= 2
        if sums != 0:
            res.append(str(sums))
        
        return "".join(res[::-1])

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容