[leetcode] Bitwise AND of Numbers Range(位运算)
2015-08-14 23:14
411 查看
不得不说位运算的应用都是很巧妙的。
这道题求一个连续区间整数的与运算的值,突破点在于连续的区间这个特点。我们可以先找几个数看一下规律,
2 3 4 5的二进制分别是 10 ,11,100,101,可以发现若m==n,则m为答案;当m!=n时,因为连续的两个数的二进制
的最后一位肯定不一样,与的值一定是0,前面相同的部分(1&1=1,0&0=0)保持。
所以我们每次先判断,不同的话就右移一位,比较前面的,直到相同的时候结束,最后左移 移动的位数。
不必担心左移的时候有1会导致溢出,从而失败,因为右移的时候前面已经补0了。
这道题求一个连续区间整数的与运算的值,突破点在于连续的区间这个特点。我们可以先找几个数看一下规律,
2 3 4 5的二进制分别是 10 ,11,100,101,可以发现若m==n,则m为答案;当m!=n时,因为连续的两个数的二进制
的最后一位肯定不一样,与的值一定是0,前面相同的部分(1&1=1,0&0=0)保持。
所以我们每次先判断,不同的话就右移一位,比较前面的,直到相同的时候结束,最后左移 移动的位数。
不必担心左移的时候有1会导致溢出,从而失败,因为右移的时候前面已经补0了。
class Solution { public: int rangeBitwiseAnd(int m, int n) { int res = 0; int offset = 0; while(m!=n){ m>>=1; n>>=1; offset++; } return m<<offset; } };
相关文章推荐
- POJ C程序设计进阶 编程题#3:寻找山顶
- HDU 4411 - Arrest(网络流‘最小费用最大流)
- Struts2集成spring3后action的几种实例方法
- 帧、场编码的个人理解
- hdoj 3342 Legal or Not 【拓扑排序】
- 在程序中提交XMLP报表
- 九度 Online Judge 算法 刷题 题目1098:字母统计
- Html5 Canvas笔记(2)-Canvas绘图
- POJ C程序设计进阶 编程题#2: 配对碱基链
- 【JS】<select>标签小结
- hdu 2255
- hdu 1233 还是畅通工程 (克鲁斯卡尔裸题)
- BZOJ2973 : 石头游戏
- I/O多路复用之-epoll
- 九度 Online Judge 算法 刷题 题目1095:2的幂次方
- 杭州电子科技大学acm-2001
- Tomcat Web
- HDU 2795 Billboard (线段树 单点更新, 询问位置)
- I/O多路复用之poll
- 供应商信息一览