LeetCode(201) Bitwise AND of Numbers Range

原创 2015年11月20日 13:50:43

题目

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.

分析

题目字面意思是给定两个整数构成闭区间, 0 <= m <= n <= 2147483647 均为合法整数,求区间内所有整数的位与结果。

看起来是一个很简单的题目,我们可以直接一次遍历得到结果,复杂度为O(n),意料之中的超时。。。

那么,换一种方法,可不可以采用递归呢? 两段分别求出结果,然后相与得到最终结果,遗憾的是再次TLE。。。

看来,不能简单的想当然解题,不妨写出每个整数的二进制表示分析一下:

5 0101
6 0110
7 0111
&
0100

有什么规律呢,我们可以看出结果中的“1”是所有数字的所共有的位;这样就有高效的解法了,我们可以利用移位的规则,将数字相异的位右移掉,记录需要移位的个数。

详细代码见下节。

AC代码

class Solution {
public:
    //方法一,一次遍历 TLE
    int rangeBitwiseAnd1(int m, int n) {

        int ret = m;
        for (int i = m+1; i <= n; ++i)
        {
            ret = ret & i;
        }//for
        return ret;
    }

    //方法二,采用递归,TLE again!
    int rangeBitwiseAnd2(int m, int n) {
        if (m == n)
            return m;

        int mid = (m + n) / 2;
        return rangeBitwiseAnd(m, mid) & rangeBitwiseAnd(mid + 1, n);
    }

    //方法三:
    int rangeBitwiseAnd(int m, int n) {
        int offset = 0;
        while (m && n)
        {
            //找到最高相同位
            if (m == n)
            {
                return m << offset;
            }
            m >>= 1;
            n >>= 1;
            offset++;
        }
        return 0;
    }
};

GitHub测试程序源码

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

【python】【leetcode】【算法题目2—Add Two Numbers】

【python】【leetcode】【算法题目2—Add Two Numbers】 题目原文: You are given two linked lists representing two non-...
  • u014615155
  • u014615155
  • 2016年11月21日 12:05
  • 1786

leetcode刷题,总结,记录,备忘 201

leetcode201Bitwise AND of Numbers Range Given a range [m, n] where 0 For example, given the rang...
  • guicaisa
  • guicaisa
  • 2016年04月24日 23:45
  • 260

leetcode 204题求素数个数

Description: Count the number of prime numbers less than a non-negative number, n   提示晒数法: http://e...
  • wangyaninglm
  • wangyaninglm
  • 2015年04月28日 22:20
  • 2131

【LeetCode-面试算法经典-Java实现】【165-Compare Version Numbers(比较版本号)】

【165-Compare Version Numbers(比较版本号)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Compare two version number...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月22日 06:49
  • 2682

Tensorflow的应用(一)

Tensorflow的安装就不介绍了,我在ubuntu安装的,还是蛮容易的,windows可能会复杂一些。网上有比较多的安装教程,这里就不介绍了。关于tf的使用主要是通过代码解释每一个知识点。    ...
  • yyxyyx10
  • yyxyyx10
  • 2017年11月28日 17:37
  • 46

位操作符(bitwise operator)

位操作符允许我们操作一个基本数据类型中的整数型值的单个“比特(bit)”,即二进制位。 位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果。 位操作符来源于 C 语言面向...
  • u011282051
  • u011282051
  • 2013年08月20日 17:43
  • 1672

LeetCode 问题汇总之递归算法

参考文章:http://fisherlei.blogspot.com 最近在刷LeetCode,开始刷题--面试--刷题。。。 下面将遇到的可以用递归求解的问题归纳于此 1. Combinatio...
  • sbitswc
  • sbitswc
  • 2014年02月27日 04:37
  • 9022

bitwise trie tree 的参考实现-nedtries简单解析

trie tree 是一种公共前缀树,(和关联规则的一种算法frequent-pattern growth算法的数据结构相同),具体定义见wiki。 上面为一棵trie tree,直观上看,...
  • breeze_gao
  • breeze_gao
  • 2013年03月08日 16:53
  • 1229

Python学习笔记 —— 数字类型【Numbers】及常用方法

Tips: 在Python中数据类型不允许改变的,如果改变了,则会重新分配内存空间。 pi: 数字常量pi(圆周率) e:自然常数 Numbers支持四种不同的数值类型:整型...
  • linfengwenyou
  • linfengwenyou
  • 2016年06月06日 15:05
  • 785

http状态码大全304、201、203等等

常见HTTP状态码大全   我们经常会遇到404、500、302等提示,它们究竟是什么意思呢?除了这几个常见的状态码外,还有哪些我们没有遇到过的但有可能出现的状态码呢...
  • xufeiayang
  • xufeiayang
  • 2016年10月17日 09:40
  • 4855
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode(201) Bitwise AND of Numbers Range
举报原因:
原因补充:

(最多只允许输入30个字)