方法一
解题思路:一个数为2的整数次幂,那么它必将被2整除
代码如下:
public static boolean isPowerOf2(){
int temp = 1;
while(temp<=num){
if(temp == num){
return true;
}
temp = temp * 2;
}
return false;
}
public static void main(String[] args){
System.out.println(isPowerOf2(32));
System.out.println(isPowerOf2(33));
}
以上算法时间复杂度为O(logn),但还有更好的办法,如下:
方法二
示例.png解题思路:8为2的整数次幂,转换为二进制为1000,在二进制的基础上减一后结果是111,而1000 & 111 在位运算中结果为0,总结如下表:
代码如下:
public static boolean isPowerOf2(int num){
return (num&num-1) == 0;
}
补充:此方法时间复杂度为O(1)
网友评论