Bitwise AND of Numbers Range
原题链接Bitwise AND of Numbers Range
计算 范围内的所有数的与运算结果
首先需要明确几个知识点
- 的最低位一定是0
- 的结果一定是0
- 的最低 位一定是0
所以如果n > m,那么 范围内所有元素的与运算结果的最低位一定是0,于是有
all_nums_and(m, n) = all_nums_and(m >> 1, n >> 1) << 1
其中all_nums_and(m, n)表示 范围内所有元素的与运算结果
代码如下
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
return n <= m ? m : rangeBitwiseAnd(m >> 1, n >> 1) << 1;
}
};