Tags: "leetcode", "bit-manipulation", access_time 1-min read

Edit this post on Github

Bitwise and of Numbers Range

Created: March 31, 2020 by [lek-tin]

Last updated: April 23, 2020

Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

Example 1

Input: [5,7]
Output: 4

Example 2

Input: [0,1]
Output: 0

Solution

«««< HEAD

Java

class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        int shift = 0;

        while (m < n) {
            m >>= 1;
            n >>= 1;
            shift++;
            // System.out.println("m: " + String.format("%32s", Integer.toBinaryString(m)).replaceAll(" ", "0")); 
            // System.out.println("n: " + String.format("%32s", Integer.toBinaryString(n)).replaceAll(" ", "0"));
            // System.out.println(shift);
        }

        return m<<shift;
    }
}

Python

dev

class Solution:
    def rangeBitwiseAnd(self, m: int, n: int) -> int:
        shift = 0

        while m < n:
            m = m >> 1
            n = n >> 1
            shift += 1

        m = m << shift

        return m