1.题目描述
给你两个整数 left
和 right
,表示区间 [left, right]
,返回此区间内所有数字 按位与 的结果(包含 left
、right
端点)。
2.样例描述
3.思路描述
方法一:按位与,求两端数字二进制的公共前缀,将二进制数右移,定义变量count记录右移次数,当两数相等时,循环结束;将left左移count次数,将结果存储到temp,求得最后结果。
方法二:如果有一个数是0,则结果为0;在left<right的时候循环,right和(right-1)逐个按位与,可求出结果。
4.代码展示
方法一:
class Solution {
public int rangeBitwiseAnd(int left, int right) {
int count =0;//用于记录向右位移次数
int temp;//用于存储最后的结果
while(left<right)//遍历,找出两数二进制的公共前缀;当找出前缀,两数相等,遍历停止
{
left >>= 1;
right >>= 1;
count++;
}
temp = left <<= count;
return temp;
}
}
方法二:
class Solution {
public int rangeBitwiseAnd(int m, int n) {
if(m ==0)
{
return 0;
}
while(m<n)
{
n = n&(n-1);
}
return n;
}
}