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

Bitwise AND of Numbers Range

原题链接Bitwise AND of Numbers Range

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

首先需要明确几个知识点

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

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

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

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

代码如下

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        return n <= m ? m : rangeBitwiseAnd(m >> 1, n >> 1) << 1;  
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值