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 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。