Power of Two/Power of Three/Power of Four

Power of Two

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

题目要求:判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数

我们应该首先考虑位操作 Bit Operation。

由于2的幂一定是正数,我们需要加以判断。这里我们使用减一相与法。

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

Power of Three

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

题目与上题要求一样

最简单的解法,不断将原数除以3,一旦无法整除,余数不为0,则说明不是4的幂,如果整除到1,说明是3的幂。

public class Solution {
    public boolean isPowerOfThree(int n) {
        if(n<=0)return false;
        while(n%3==0){
            n/=3;
        }
        return n==1;
    }
}

Power of Four

Given an integer, write a function to determine if it is a power of four.
要求与上面一样

最简单的解法,不断将原数除以4,一旦无法整除,余数不为0,则说明不是4的幂,如果整除到1,说明是4的幂。

public class Solution {
    public boolean isPowerOfFour(int num) {
        if(num<=0)return false;
        while(num%4==0){
            num/=4;
        }
        return num==1;
    }
}

这里同样可以使用位运算,使用减一相与法可以判断是2的次幂与减一整除3就可以排除不是4的次幂的可能性。

public class Solution {
    public boolean isPowerOfFour(int num) {
        return ((num&(num-1))==0&&num>0&&(num-1)%3==0);
    }
}

你可能感兴趣的:(Power of Two/Power of Three/Power of Four)