bit manipulation September 1, 2022

Bitwise and of numbers range

Time O(n) Space O(1) Open original problem

If the right crosses the next 2^n of left where n is the number of bits for left, that means 2^n >= left, then the result is always going to be 0. For example, AND product of 1010 and 10000 will always be 0. We check that and return early. Else we calculate the values manually and return.

class Solution:
    def rangeBitwiseAnd(self, left: int, right: int) -> int:
        if right >= left << 1:
            return 0

        res = right
        for num in range(left, right):
            res &= num

        return res

Time Complexity: O(n)
Space Complexity: O(1)