一、我开始的想法是:
public boolean isPowerOfTwo(int n) {
if(n<=0) return false;
while(n%2==0) {
n=n/2;
}
return n==1;
}
使用递归:
public boolean isPowerOfTwo(int n) {
if(n<=0) return false;
if(n==1) return true;
if(n%2==0) {
return isPowerOfTwo(n/2);
}
return false;
}
二、在评论里面看到:
public boolean isPowerOfTwo(int n) {
if(n<=0) return false;
return (n&n-1)==0;
}
原因:2的幂的数表示为2进制为 1000···,减一则为 0111···,按位与则全为0(牛!)