231. Power of Two
2016-03-13 19:09
232 查看
题目:
Given an integer, write a function to determine if it is a power of two.
解题思路:
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。
如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。
最快速的方法:
(number & number - 1) == 0
原因:因为2的N次方换算是二进制为10……0这样的形式(0除外)。与上自己-1的位数,这们得到结果为0。例如。8的二进制为1000;8-1=7,7的二进制为111。两者相与的结果为0。计算如下:
1000
& 0111
-------
0000
Given an integer, write a function to determine if it is a power of two.
解题思路:
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。
如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。
最快速的方法:
(number & number - 1) == 0
原因:因为2的N次方换算是二进制为10……0这样的形式(0除外)。与上自己-1的位数,这们得到结果为0。例如。8的二进制为1000;8-1=7,7的二进制为111。两者相与的结果为0。计算如下:
1000
& 0111
-------
0000
class Solution { public: bool isPowerOfTwo(int n) { if(n<=0)return false; return (n&(n-1))==0; } };
相关文章推荐
- 如何选择使用C#中的集合
- 再次记录老K站点的工作策略
- Machine Learning - Neural Networks for Multi-class Classification
- [leetcode] 82. Remove Duplicates from Sorted List II
- 【规范】Servlets和JSP的比较
- UML之时序图
- 设计模式之建造者模式
- git的基本指令
- 对照Java学习Swift--基础部分
- 开启和关闭AFIO时钟
- 在VISUAL STUDIO 2013上创建IT++项目
- OC语言中NSString操作方法小总结
- 03—装饰模式
- 在WEB工程的web层中的编程技巧
- Linux内核分析第三周总结
- Xamarin.Forms——WebView技术研究
- Ajax——省市联动
- 系统集成3月7日作业
- AndroidStudio 创建aidl文件时的问题,参考资料《Android的开发艺术探索》
- 基因数据处理13之bwa处理SRR003161