如何判斷一個數是否爲,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)code

方法二,利用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;
    }
    
}
相關文章
相關標籤/搜索