public boolean isPowerOfTwo(int n) {
if(n <= 0)return false;
if(n == 1 || n == 2)return true;
int tmp = 2;
while(n >= tmp){
if(n % tmp != 0)return false;
n /= tmp;
}
return true;
}
思路:
位操作:因为一个数如果是2的幂次方,在计算机表示出来只有一位为1.(00001000为2
2的三次幂:8),所以如果减1那么就会成为(00000111等于7)那么这时做与&操作,结果肯定为0。
代码如下:
return (n > 0) && (n & n-1) == 0;
第二种思路就是直接循环%2 与 /2,
代码如下:
public boolean isPowerOfTwo(int n) {
if(n <= 0)return false;
if(n == 1 || n == 2)return true;
int tmp = 2;
while(n >= tmp){
if(n % tmp != 0)return false;
n /= tmp;
}
return true;
}