leetcode 201. Bitwise AND of Numbers Range

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

For example, given the range [5, 7], you should return 4.


分析了一下數據的格式,發現相差1時,最後一位爲必爲0,相差2時,最後第二位必爲0。。。以此類推,以m和n的and值作爲起始值進行運算

public class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        if(m==n) return m;
        if(n/2>=m) return 0;
        int ans = n&m;
        int diff = n - m;
        int temp = 0xffffffff;
        while(diff!=0){
            temp <<= 1;
            ans = ans & temp;
            diff /=  2;
        }
        return ans;
    }
}

別人的方法,位操作m和n

public class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        if(m == 0){
            return 0;
        }
        int moveFactor = 1;
        while(m != n){
            m >>= 1;
            n >>= 1;
            moveFactor <<= 1;
        }
        return m * moveFactor;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章