1. 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.

Example 1:

Input: [5,7]
Output: 4

Example 2:

Input: [0,1]
Output: 0

解法1 一个一个做位与,但是会超时。。。

解法2 事实:

  • 与运算中,只要有一个是0,结果肯定是0
  • 将二进制数字看作是字符串时,m和n的共同前缀也是范围[m, n]中所有数字的共同前缀

因此只需要求出m和n的共同前缀即可

解法2.1 移位。将m和n逐一向右移位,直到两者相等

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

解法2.2 Brian Kernighan's Algorithm。n&(n-1)会将n中最右边的1翻转为0

class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
while(m < n)n &= n - 1;
return m & n;
}
};

最新文章

  1. 用普通计算机假设基于liunx系统的NAS部署FineReport决策系统
  2. ngrok反向隧道--获取内网IP
  3. [Scala] 快学Scala A3L3
  4. (原创)QuartusII设置虚拟引脚(Virtual Pin)
  5. Android Studio修改包名和applicationId的方法
  6. Android+OpenCV 摄像头实时识别模板图像并跟踪
  7. C# 给picturebox添加滚动条
  8. [转贴]xcode帮助文档
  9. Mysqldb连接Mysql数据库(转)
  10. RMAN数据库恢复 之归档模式有(无)备份-丢失数据文件的恢复
  11. 使用Android简单实现有道电子词典
  12. 不要在Android的Application对象中缓存数据!
  13. Tensorflow基本概念
  14. Linux - 账户切换授权
  15. 《linux内核设计分析》 第一周作业
  16. 对 JavaScript 下 namespace 功能的简单分析
  17. Java的动态编译、动态加载、字节码操作
  18. php箭头符号
  19. 【RF库测试】DateTime库
  20. UVA-10410 Tree Reconstruction (树重建)

热门文章

  1. CF667A Pouring Rain 题解
  2. cmake之指定clang(++)编译器为默认编译器
  3. 【LeetCode】526. Beautiful Arrangement 解题报告(Python & C++)
  4. 【LeetCode】521. Longest Uncommon Subsequence I 解题报告(Python)
  5. 如何把 MySQL 备份验证性能提升 10 倍
  6. 【感悟】观《BBC彩色二战纪录片》有感
  7. 从源码看全局异常处理器@ExceptionHandler&amp;@ExceptionHandler的生效原理
  8. MySQL数据操作与查询笔记 • 【第3章 DDL 和 DML】
  9. Unity——卡通渲染实现
  10. PostgreSQL相关知识概念