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:
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;
}解法说明:就是将头尾两个数据都向右移动,直到二者相等为止。然后后面的都补零。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。