数字范围按位与

201. 数字范围按位与

给你两个整数 leftright ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 leftright 端点)。

示例 1:

1
2
输入:left = 5, right = 7
输出:4

示例 2:

1
2
输入:left = 0, right = 0
输出:0

示例 3:

1
2
输入:left = 1, right = 2147483647
输出:0

提示:

  • 0 <= left <= right <= 231 - 1
image-20240405003514747

只有公共前缀的部分按位与会保留,不同的部分按位与都会变成0

首先对left 和 right 右移,直到其相同,并记录位移次数

image-20240405003733070

然后将left或right左移移动的次数,就是范围内的按位与

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int shift = 0;
while(left < right){ //直到left与right相等
left = left >> 1;
right = right >> 1;
shift ++;
}
return left << shift; //低位补0
}
}

数字范围按位与
http://example.com/2023/06/22/算法/数学相关/15. 数字范围按位与/
作者
PALE13
发布于
2023年6月22日
许可协议