码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode] Bitwise AND of Numbers Range(位运算)

时间:2015-08-15 00:14:27      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:leetcode   位运算   二进制   

不得不说位运算的应用都是很巧妙的。

这道题求一个连续区间整数的与运算的值,突破点在于连续的区间这个特点。我们可以先找几个数看一下规律,

2 3 4 5的二进制分别是 10 ,11,100,101,可以发现若m==n,则m为答案;当m!=n时,因为连续的两个数的二进制

的最后一位肯定不一样,与的值一定是0,前面相同的部分(1&1=1,0&0=0)保持。

所以我们每次先判断,不同的话就右移一位,比较前面的,直到相同的时候结束,最后左移  移动的位数。

不必担心左移的时候有1会导致溢出,从而失败,因为右移的时候前面已经补0了。

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        int res = 0;
        int offset = 0;
        while(m!=n){
            m>>=1;
            n>>=1;
            offset++;
        }
        return m<<offset;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

[leetcode] Bitwise AND of Numbers Range(位运算)

标签:leetcode   位运算   二进制   

原文地址:http://blog.csdn.net/nk_test/article/details/47669493

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!