思路:
- 最普通的思路就是無限的給這個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;
}
}