如何判断一个数是否为,2^0,2^1,2^3.......2^n

方法一:利用1进行二进制移位运算,判断是否存在


package test;
public class Test02 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println(isPower(4));
        System.out.println(isPower(6));
    }

    public static boolean isPower(int n){
        if(n<1){
            return false;
        }
        int i=1;
        while(i<=n){
            if(i==n){
                return true; //相等后说明存在一个2的n次幂
            }
            i<<=1;
        }
        return false;
    }
}

上述时间复杂度为O(logn)

方法二,利用2^n的二进制特性,例如num=2^4=00010000 那么num-1=(2^4)-1=000011111,那么num&(num-1)=0;


package test;
public class Test02 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println(isPower(4));
        System.out.println(isPower(6));
    }

    public static boolean isPower(int n){
        if(n<1){
            return false;
        }
        int m=n&(n-1);
        return m==0;
    }
    
}

猜你喜欢

转载自www.cnblogs.com/liu-ya/p/9672335.html