每天一道LeetCode-----计算给定范围内所有数的与运算结果

Bitwise AND of Numbers Range

原题链接Bitwise AND of Numbers Range

计算 [ m : n ] 范围内的所有数的与运算结果

首先需要明确几个知识点

  • a & ( a + 1 ) 的最低位一定是0
  • 0 & b 的结果一定是0
  • a & ( a + 1 ) & ( a + 2 ) & . . . & ( a + k ) 的最低 位一定是0

所以如果n > m,那么 [ m : n ] 范围内所有元素的与运算结果的最低位一定是0,于是有

all_nums_and(m, n) = all_nums_and(m >> 1, n >> 1) << 1

其中all_nums_and(m, n)表示 [ m : n ] 范围内所有元素的与运算结果

代码如下

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        return n <= m ? m : rangeBitwiseAnd(m >> 1, n >> 1) << 1;  
    }
};

猜你喜欢

转载自blog.csdn.net/sinat_35261315/article/details/79433010
今日推荐