思路:
- 最普通的思路就是无限的给这个n除以2,看它最后是不是等于1。但是这个方法特别耗内存,性能较低。
- 看leetcode评论说,2的幂一定可以被2的31次幂整除,这也可以判断。
- 最最最精妙的方法就是用二进制来做。如果这个数的二进制只有一位1,那就是2的幂。那怎么判断是不是只有1位呢。举个例子,8的二进制是1000,7的二进制是0111,在《剑指offer》上有过怎么消除最低位的1的方法。那就是n&(n-1),n-1一定会把n的最低位1后面的0全变为1,而自己变为0。那么也就是7和8进行与运算,结果是0。
代码:
class Solution {
public boolean isPowerOfTwo(int n) {
if(n<=0) return false;
return (n & (n-1))==0;
}
}