根据题意,相当于我们要找到这个区间内所有数字的公共前缀,那么依次将其右移一位,循环比较并记录移动位数,直到相等,那么此时的数字左移之前移动次数得到的就是公共前缀的结果,也是这些数字与操作后得到的结果。
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int shift = 0;
while (left < right) {
left >>>= 1;
right >>>= 1;
++shift;
}
return left << shift;
}
}