Approach 1: Iteration

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        n = max(len(a), len(b))
        a, b = a.zfill(n), b.zfill(n)
 
        res = [''] * (n + 1)
 
        carry = 0
        for i in range(n - 1, -1, -1):
            res[i] = str((carry + int(a[i]) + int(b[i])) % 2)
            carry = (carry + int(a[i]) + int(b[i])) // 2
        
        if carry == 1:
            res = ['1'] + res 
 
        return ''.join(res)

Complexity

Time:
Space:

Approach 2: Bit-twiddling

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        a, b = int(a, 2), int(b, 2)
 
        while b > 0:
            a, b = a ^ b, (a & b) << 1
        
        return bin(a)[2:]

Notes

TODO

Other Languages