Skip to content

342 Power of Four

Problem:

Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example: Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?

Solution:

public class Solution {
    public boolean isPowerOfFour(int num) {
        if (num <= 0) {
            return false;
        }
        while (num > 3) {
            if (num % 4 != 0) {
                return false;
            }
            num = num / 4;
        }
        return num == 1;
    }
}
public class Solution {
    public boolean isPowerOfFour(int num) {
        return num == 1 || num == 4 || num == 16 || num == 64 || num == 256 || num == 1024 || num == 4096 || num == 16384 || num == 65536 || num == 262144 || num == 1048576 || num == 4194304 || num == 16777216 || num == 67108864 || num == 268435456 || num == 1073741824;
    }
}
public class Solution {
    public boolean isPowerOfFour(int num) {
        int count0=0;
        int count1=0;

        while(num>0){
            if((num&1)==1){
                count1++;
            }else{
                count0++;
            }

            num>>=1;
        }

        return count1==1 && (count0%2==0);
    }
}
public class Solution {
    public boolean isPowerOfFour(int num) {
        if (num <= 0) {
            return false;
        }
        double res = Math.log10(num) / Math.log10(4);  
        return Double.compare(res, (int)res) == 0;
    }
}
public class Solution {
    public boolean isPowerOfFour(int num) {
        return num > 0 && (num & (num - 1)) ==0  && (num & 0x55555555) == num;
    }
}