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
原创粉丝点击