LeetCode201--Bitwise AND of Numbers Range

题目链接:点击打开链接

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),返回m到n范围以内的所有数字与运算后的结果。

思路:与运算特点:0与任何数字都为0.所以在m到n范围内,每一个位上只要出现0,那么该位则为0.

考虑两个数的最后一位,如果两个数之间的某个数为偶数,则该位(最后一位)置为0.

只要两个数不相等,则这两个数之间必存在偶数,置为0.

然后将两个数一起向右移1位,继续比较两数,直至两数相等。

所以题目的解就相当于找出m和n二进制数最长的公共前缀,然后将其不同的后缀统统置为0.

算法时间复杂度O(logN).

<pre name="code" class="cpp">int rangeBitwiseAnd(int m, int n)
    {
         int i=0;
         while(m!=n)
         {
             m>>=1;
             n>>=1;
             i++;
         }
         return m<<i;
    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值