题目:给你两个整数 left
和 right
,表示区间 [left, right]
,返回此区间内所有数字 按位与 的结果(包含 left
、right
端点)。
提示:0 <= left <= right <= 2^31 - 1
思路:
位与的特性:只要参与位与的元素有一个为 0
,那么位与结果就为 0
。换句话说,如果参与位与的元素都相同,位与结果就是这个相同元素。
代码:
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int count = 0; // 记录右移次数
while (left != right) {
count++;
left >>= 1;
right >>= 1;
}
return left <<= count; // 左移
}
}
性能: