zoukankan      html  css  js  c++  java
  • [leetcode] Bitwise AND of Numbers Range(位运算)

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

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

    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;
        }
    };


  • 相关阅读:
    数据结构之c++感悟
    常见linux系统中RPM包的通用命名规则
    scripts
    http
    iscsi
    RHCE认证经典考题
    数据库
    配置空客户端邮件
    配置nfs服务
    Python版本的7大排序
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6897069.html
Copyright © 2011-2022 走看看