201 Bitwise AND of Numbers Range 数字范围按位与

给定范围 [m,n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含m, n两端点)。
例如,给定范围 [5,7],您应该返回 4。

详见:https://leetcode.com/problems/bitwise-and-of-numbers-range/description/

Java实现:

将m和n中的所有整数相与,得到的结果是m和n中的所有数的共同高位保留,除共同高位之外的其他位置零。那么关键问题就是如何找到这个共同的高位,其实并不难,m和n中所有数的共同高位也就是m和n的共同高位。

方法一:

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

方法二:

class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        while (m < n){
            n &= (n - 1);
        }
        return n;
    }
}

C++实现:

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        int offset=0;
        while(m!=n)
        {
            m>>=1;
            n>>=1;
            ++offset;
        }
        return (m<<offset);
    }
};

 参考:https://www.cnblogs.com/grandyang/p/4431646.html

posted on 2018-04-08 16:47  lina2014  阅读(156)  评论(0编辑  收藏  举报

导航