231. Power of Two
来源:互联网 发布:mac下完jdk怎么用 编辑:程序博客网 时间:2024/05/16 12:23
题目:
Given an integer, write a function to determine if it is a power of two.
题意:
给定一个整数,写一个程序检测该整数是否是2的幂。
思路一:
最直接的方法就是不停地除以2,看最后的余数是否为1,要注意考虑输入是负数和0的情况。
代码:递归版:8ms
class Solution {public: bool isPowerOfTwo(int n) { return n>0 && (n==1 || (n%2==0 && isPowerOfTwo(n/2))); }};代码:轮询版:8ms
class Solution {public: bool isPowerOfTwo(int n) { while(n && n%2==0){ n /= 2; } return n==1; }};
观察下2的次方数的二进制写法的特点:
1 2 4 8 16 ....
1 10 100 1000 10000 ....
那么我们很容易看出来2的次方数都只有一个1,剩下的都是0,所以我们的解题思路就有了,我们只要每次判断最低位是否为1,然后向右移位,最后统计1的个数即可判断是否是2的次方数。
代码:8ms
class Solution {public: bool isPowerOfTwo(int n) { int count = 0; while(n>0){ count += (n&1); n >>= 1; } return count==1; }};
思路三:
这道题还有一个技巧,如果一个数是2的次方数的话,根据上面分析,那么它的二进数必然是最高位为1,其它都为0,那么如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0,用这个性质也能来解题,而且只需一行代码就可以搞定。
代码:9ms
class Solution {public: bool isPowerOfTwo(int n) { return (n>0) && (!(n&(n-1))); }};
0 0
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- 231. Power of Two
- BroadcastReceiver简介
- Xamarin体验:使用C#开发iOS/Android应用
- 对象比较器
- 学生管理系统(JAVA)
- Single Number III
- 231. Power of Two
- json 转换篇
- 剑指offer面试题:二维数组中的查找
- Add Binary 将二进制数相加
- git配置(用ssh)
- oracle数据库中重要的文件(控制文件、数据文件、重写日志文件、归档日志文件、初始化参数文件)
- Java监听和发送飞秋群消息
- Android 手机设置中的关于手机界面
- linux进程切换(linux3.4.5,x86)