因为数字是连续变化的,我们可以发现一个规律就是一个数除了最开始的连续1的位置外其余位置都有0的情况(11011, 只有前两个1一定为0),而对于 & 的情况我们只需要找到固定为1的位置就行,所以我们只要找到left固定1的位置和right固定1的位置,然后取交集即可。
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int base = 0;
// 找到left和right的公共前缀
while(left < right) {
left >>= 1;
right >>= 1;
base++;
}
return left << base;
}
}

被折叠的 条评论
为什么被折叠?



