[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

你可能感兴趣的:([LeetCode]67、二进制求和)