方法一:利用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)
方法二,利用2n的二进制特性,例如num=24=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;
}
}