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.

 

我们先从题目中给的例子来分析,[5, 7]里共有三个数字,分别写出它们的二进制为:

101  110  111

相与后的结果为100,仔细观察我们可以得出,最后的数是该数字范围内所有的数的左边共同1的部分,如果上面那个例子不太明显,我们再来看一个范围[26, 30],它们的二进制如下:

11010  11011  11100  11101  11110

发现了规律后,我们只要写代码找到左边公共1的部分即可,我们可以从建立一个32位都是1的mask,然后每次向左移一位,比较m和n是否相同,不同再继续左移一位,直至相同,然后把m和mask相与就是最终结果,代码如下:

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

 

时间: 2024-12-22 10:03:35

Bitwise AND of Numbers Range的相关文章

[LeetCode]201.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. 思路 [5, 7]里共有三个数字(5,6,7),二进制分别为: 1 01 1 10 1 11 相与后的结果为100 [9, 11]里共

[LeetCode] 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. 解题思路 ① n&(n-1),可以去除n的最低位的1. ② 从n一直与到m,可以去掉的1就是n和m的右端不相等的部分的1. 例如对于

[经典面试题]位运算操作

[LeetCode]136.Single Numbe [LeetCode]201.Bitwise AND of Numbers Range [剑指Offer]40.数组中只出现一次的数字 一道位运算的算法题

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

python使用range函数计算一组数和的方法

  这篇文章主要介绍了python使用range函数计算一组数和的方法,涉及Python中range函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python使用range函数计算一组数和的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 sum = 0 numbers = range(1,10) for i in numbers: sum += i print(sum) 运行结果为:45 希望本文所述对大家的Python程序设计有所帮助.       

python编码最佳实践之总结

该文章转自阿里巴巴技术协会(ATA) 作者:空溟    相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁.易读以及可扩展性等特性使得它大受青睐.      工作中很多同事都在用python,但往往很少有人关注它的性能和惯用法,一般都是现学现用,毕竟python不是我们的主要语言,我们一般只是使用它来做一些系统管理的工作.但是我们为什么不做的更好呢?python zen中有这样一句:There s

将IP地址转换为长整型、将长整型转换为IP地址

ip地址|转换 将IP地址转换为长整型 Converts a string ip address ("192.168.0.1") to a Long number (3232235521). One of the reasons to do this would be to store IP addresses in databases. Numbers greatly reduce the size required to store this information. Inputs

动态网页技术PHP的数组处理函数库

array :  建立一个新的数组.  array_walk :  让用户自订函数能处理数组中的每一个元素.  arsort :  将数组的值由大到小排序.  asort :  将数组的值由小到大排序.  count :  计算变量或数组中的元素个数.  current :  返回数组中目前的元素.  each :  返回数组中下一个元素的索引及值.  end :  将数组的内部指针指到最后的元素.  key :  取得数组中的索引资料.  ksort :  将数组的元素依索引排序.  list

PHP中数组元素升序、降序及重新排序的函数

在PHP数组学习摘录部分了解到最基本的PHP数组的建立和数组元素的显示.需要深入学习下PHP数组的相关操作.首先接触的就是数组元素的升序.降序的排序问题. 1,快速创建数组的函数range() 比如range()函数可以快速创建从1到9的数字数组: <?php $numbers=range(1,9);echo $numbers[1];?> 当然,使用range(9,1)则创建了9到1的数字数组.同时,range()还可以创建从a到z 的字符数组: <?php $numbers=range