题目
给你两个整数 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;
}
}

该博客介绍了两种方法来计算给定区间[left, right]内所有数字的按位与结果。方法一是寻找公共前缀,通过右移操作找到相同位数;方法二是使用Brian Kernighan算法,通过按位与自身减一的方式逐步缩小范围。示例展示了不同输入下的输出结果,并提供了Java实现代码。
974

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



