[LeetCode] Bitwise AND of Numbers Range 数字范围位相与
来源:互联网 发布:java怎么与mysql连接 编辑:程序博客网 时间:2024/06/06 14:26
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.
Credits:
Special thanks to @amrsaqr for adding this problem and creating all test cases.
又是一道考察位操作Bit Operation的题,相似的题目在LeetCode中还真不少,比如Repeated DNA Sequences 求重复的DNA序列, Single Number 单独的数字, Single Number II 单独的数字之二 , Grey Code 格雷码,和 Reverse Bits 翻转位 等等,那么这道题其实并不难,我们先从题目中给的例子来分析,[5, 7]里共有三个数字,分别写出它们的二进制为:
101 110 111
相与后的结果为100,仔细观察我们可以得出,最后的数是该数字范围内所有的数的左边共同的部分,如果上面那个例子不太明显,我们再来看一个范围[26, 30],它们的二进制如下:
11010 11011 11100 11101 11110
发现了规律后,我们只要写代码找到左边公共的部分即可,我们可以从建立一个32位都是1的mask,然后每次向左移一位,比较m和n是否相同,不同再继续左移一位,直至相同,然后把m和mask相与就是最终结果,代码如下:
class Solution {public: int rangeBitwiseAnd(int m, int n) { int d = INT_MAX; while ((m & d) != (n & d)) { d <<= 1; } return m & d; }};
- Python学习笔记 —— 元组
- [AngularJS面面观] 9. scope事件机制 - 基本概念以及生命周期
- Unicode编码(UTF8/UTF16)
- 【HTML笔记四】认识标签三
- 01背包问题-java
- [LeetCode] Bitwise AND of Numbers Range 数字范围位相与
- LinearLayout 属性详解
- Unity协同
- 《CSAPP》读书笔记:面向高速缓存编程
- 矩阵键盘扫描程序
- 软件开发中的deadline该怎么定
- [AngularJS面面观] 10. scope事件机制 - $emit,$broadcast以及事件对象
- 菜鸟碎碎念之Mysql
- 飞机大战(JavaScript代码)