給定一個整數,編寫一個函數來判斷它是不是 2 的冪次方。java
輸入: 1
輸出: true
解釋: 20 = 1複製代碼
輸入: 16
輸出: true
解釋: 24 = 16複製代碼
輸入: 218
輸出: false
複製代碼
【1】 1bash
【2】10函數
【4】100ui
【8】1000spa
...code
能夠找一下2的冪的共同點,有且只有一個1,因此能夠經過 (n != 0 && (n&(n-1) == 0))來判斷。cdn
在java中 Integer.MIN_VALUE - 1 = Integer.MAX_VALUE(和補碼有關)。而Integer.MAX_VALUE & Integer.MIN_VALUE 等於0 ,因此當n爲Integer.MIN_VALUE的時候,該式子不成立,須要進行一個參數判斷
blog
當n == Integer.MIN_VALUE就直接返回false,ssl
其實更好的處理方法就是當 n<=0的時候直接返回false,由於2的冪函數圖像只在第1、二象限,隨着x的減小隻會無限趨近於0,不會等於0,因此當 n<=0時能夠直接返回false。
it
class Solution {
public boolean isPowerOfTwo(int n) {
return n <= 0 ? false : (n & (n - 1)) == 0;
}
}
複製代碼
複製代碼