首页
学习
活动
专区
圈层
工具
发布

LeetCode 201 Bitwise AND of Numbers Range

201 Bitwise AND of Numbers Range

The hardest part of this problem is to find the regular pattern. For example, for number 26 to 30 Their binary form are: 11010 11011 11100 11101 11110

Because we are trying to find bitwise AND, so if any bit there are at least one 0 and one 1, it always 0. In this case, it is11000. So we are go to cut all these bit that they are different. In this case we cut the right 3 bit.

I think after understand this, the code is trivial:

代码语言:java
复制
    public int rangeBitwiseAnd(int m, int n) {
      int i = 0; // i means we have how many bits are 0 on the right
      while(m != n){
        m >>= 1;
        n >>= 1;
        i++;  
      }  
      return m << i;  
    }

解法说明:就是将头尾两个数据都向右移动,直到二者相等为止。然后后面的都补零。

下一篇
举报
领券