
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
int rec=0;
for(int i=0;m!=n;i++)
{
m>>=1;
n>>=1;//把两个数字同时右移,如果最高位位数相同就会留下最高为,如果位数不同必定会是0;因为从低位开始&,m++会造成进位
//
rec++;
if(m==0)return 0;//提前特判;当m==0时说明m已经移位完了,此时n的位数大于m结果一定是0;因为m++到n会把所有位数清0;
}
return n<<rec;
}
};
位运算技巧:求区间按位与
本文介绍了一种使用位运算解决特定数学问题的方法——求解区间内所有整数的按位与结果。通过将两个边界值同时右移直到它们相等,可以高效地找到结果。这一技巧在算法设计和编程竞赛中十分实用。
292

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



