Bitwise AND of Numbers Range(区间按位与)
【难度:Medium】
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
For example, given the range [5, 7], you should return 4.
给定一个区间[m,n],求该区间所有整数按位与运算的结果。
解题思路
普通算法在区间很大时会导致超时,因此要使用一些位操作。主要思路就是通过判断m和n不同的位数有多少,这些对应的位置按位与结果一定为0,那么当最后剩下m和n相同的位时,按位与就是m(或n),左移不同的位数即可。
c++代码如下:
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
int tmp = 0;
while (m != n) {
//右移1位后判断
m >>= 1;
n >>= 1;
cout << m << " " << n << endl;
tmp++;
}
return n<<tmp;
}
};