二进制求和

题目描述

来源于 https://leetcode-cn.com/

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

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

示例 1:

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

示例 2:

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

解法:

逐项相加向前进位即可。

class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        cy = 0
        bits = []

        i = len(a) - 1
        j = len(b) - 1
        while i >= 0 or j >= 0:
            if i < 0:
                bit_a = 0
            else:
                bit_a = int(a[i])
                
            if j < 0:
                bit_b = 0
            else:
                bit_b = int(b[j])
            
            i -= 1
            j -= 1
            
            bit_sum = (bit_a + bit_b + cy)
            cy = bit_sum // 2
            bits.append(bit_sum % 2)
            
        if cy:
            bits.append(cy)
        
        return ''.join(map(str, bits[::-1]))