Bit Manipulation

Author

Pham Nguyen Hung

Published

July 21, 2023

Bit Manipulation

Definition

Problems

1. Add binary

Intuition

Approach

Complexity

  • Time complexity:

  • Space complexity:

Code

  • Dumb way to do it
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        shorterLength = min(len(a), len(b))
        a = list(a)
        b = list(b)
        remainder = 0
        result = []
        
        for _ in range(shorterLength):
            num_a, num_b = a.pop(), b.pop()
            interm = eval(num_a + '+' + num_b) + remainder
            remainder = self.evaluate(interm, result, remainder)
        while a:
            num_a = a.pop()
            interm = int(num_a) + remainder
            remainder = self.evaluate(interm, result, remainder)
        while b:
            num_b = b.pop()
            interm = int(num_b) + remainder
            remainder = self.evaluate(interm, result, remainder)
        if remainder:
            result.append('1')
        return ''.join(result[::-1])
    
    def evaluate(self, interm, result, remainder):
        if interm == 0:
            result.append('0')
            remainder = 0
        elif interm == 1:
            result.append('1')
            remainder = 0
        elif interm == 2:
            result.append('0')
            remainder = 1
        else:
            result.append('1')
        return remainder
  • Smart way to do it
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        result = ''
        remainder = 0

        a, b = a[::-1], b[::-1]
        
        for i in range(max(len(a), len(b))):
            digitA = int(a[i]) if i < len(a) else 0
            digitB = int(b[i]) if i < len(b) else 0

            interm = digitA + digitB + remainder
            char = str(interm % 2)
            result = char + result
            remainder = interm // 2
        
        if remainder:
            result = '1' + result

        return result