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.

Example 1:

Input: [5,7]
Output: 4

Example 2:

Input: [0,1]
Output: 0

题目大意:

返回[m,n]这个范围内所有数字&的结果。

解法:

我先是直接将这个范围的数字进行&操作,得到最后结果,但是这种做法超时了。

java:

class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        int res=m;
        for(int i=m+1;i<=n;i++){
            res&=i;
        }
        return res;
    }
}

看了看网上的解法,在[m,n]这个范围内,只要存在一个数字,在一位上是0,那么最后&的结果上这一位也是0。

解法的思路如下:

1.当m!=n的时候,那么m与n之间一定存在一个奇数和一个偶数,最后那一位&的结果一定是0

2.将m,n都右移一位,使用变量记录最后几位零的个数,继续到1步骤判断

3.将m*lastIndex返回,相当于把最后几位0给补上。

java:

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

        return m*lastIndex;
    }
}

  

posted @ 2019-04-24 15:38  小白兔云  阅读(107)  评论(0编辑  收藏  举报