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);
    }
}

推荐阅读更多精彩内容

  • 鸟儿在窗外 欢快的叫中 似乎永远没有烦恼 在初秋的早上 请早些起床吧 空气很好 路上行人很少 你甚至能看到露珠的味...
    丹丹_1932阅读 56评论 0 1
  • 我的一同事,嘴特毒,常常是杀人于无形之中。这段日子相处下来,我知道他是不会改的。因为我已经阵亡了不知多少次,有多少...
    颜痴阅读 106评论 0 1