[leetcode]231.Power of Two

Posted shinjia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode]231.Power of Two相关的知识,希望对你有一定的参考价值。

题目

Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true
Explanation: 20 = 1
Example 2:

Input: 16
Output: true
Explanation: 24 = 16
Example 3:

Input: 218
Output: false

解法一

思路

就是统计该数字转成二进制以后1的个数,如果只有一个1,说明其为2的幂。

代码

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n < 0) return false;
        int res = 0;
        for(int i = 0; i < 32; i++) {
            res += (n&1);
            n >>= 1;
        }
        return res == 1;
    }
}

解法二

思路

如果一个数是2的次方数的话,根据上面分析,那么它的二进数必然是最高位为1,其它都为0,那么如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0,用这个性质也能来解题,而且只需一行代码就可以搞定。

代码

class Solution {
    public boolean isPowerOfTwo(int n) {
        return ((n & (n-1))==0 && n>0);
    }
}







以上是关于[leetcode]231.Power of Two的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode191 Number of 1 Bits. LeetCode231 Power of Two. LeetCode342 Power of Four

#Leetcode# 231. Power of Two

LeetCode 231. Power of Two

LeetCode_231. Power of Two

leetcode 231. Power of Two

LeetCode231. Power of Two