题目
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。
示例
输入:left = 5, right = 7
输出:4
输入:left = 0, right = 0
输出:0
输入:left = 1, right = 2147483647
输出:0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:找公共前缀
Java实现
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int flag = 0;
while (left < right) {
left >>= 1;
right >>= 1;
flag++;
}
return left << flag;
}
}
方法2:Brian Kernighan 算法
Java实现
class Solution {
public int rangeBitwiseAnd(int left, int right) {
while (right > left) {
right = right & (right - 1);
}
return right;
}
}