201. Bitwise AND of Numbers Range

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了201. Bitwise AND of Numbers Range相关的知识,希望对你有一定的参考价值。

一、题目

  1、审题

  技术分享图片

  2、分析

    求 n~m 范围内的所有数字进行二进制 & 运算后的结果。

 

二、解答

  1、思路:

    方法一、

    以 26~30 为例,二级制 & 运算,若出现了一个 0 则结果为 0。在这个例子中,结果为 11000,因此我们要减去后边部分不同的部分。这里后边有 3 个不同。

    技术分享图片

    public int rangeBitwiseAnd2(int m, int n) {
        int i = 0; // i means we have how many bits are 0 on the right
        while(m != n){
            m >>= 1;
            n >>= 1;
            i++;  
          }  
      return m << i;      
    }

 

  方法二、

    直接统计 m、n 共同前缀。后边部分置为 0。

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

 

  方法三、

    每次将 n 的最右边的 1 化为 0,直到 m >= n,则 n 即为 答案。

    public int rangeBitwiseAnd3(int m, int n) {
        while(m < n)
            n = n & (n - 1); // 每次将 n 最右边一个 1 去除
        return n;
    }

 

以上是关于201. Bitwise AND of Numbers Range的主要内容,如果未能解决你的问题,请参考以下文章

201. Bitwise AND of Numbers Range

201. Bitwise AND of Numbers Range

201. Bitwise AND of Numbers Range

201. Bitwise AND of Numbers Range

LeetCode201 Bitwise AND of Numbers Range Java 题解

leetcode 201.Bitwise AND of Numbers Range