leetcode 231 2的冪

溫酒煮Bug發表於2019-01-23

描述:

給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。

示例 1:

輸入: 1
輸出: true
解釋: 20 = 1複製程式碼

示例 2:

輸入: 16
輸出: true
解釋: 24 = 16複製程式碼

示例 3:

輸入: 218
輸出: false
複製程式碼

思路:

【1】  1

【2】10

【4】100

【8】1000

...

可以找一下2的冪的共同點,有且只有一個1,所以可以通過 (n != 0 && (n&(n-1) == 0))來判斷。

在java中 Integer.MIN_VALUE - 1 = Integer.MAX_VALUE(和補碼有關)。而Integer.MAX_VALUE & Integer.MIN_VALUE 等於0 ,所以當n為Integer.MIN_VALUE的時候,該式子不成立,需要進行一個引數判斷

當n == Integer.MIN_VALUE就直接返回false,

其實更好的處理方法就是當 n<=0的時候直接返回false,因為2的冪函式影像只在第一、二象限,隨著x的減少只會無限趨近於0,不會等於0,所以當 n<=0時可以直接返回false。

程式碼:

class Solution {
  public boolean isPowerOfTwo(int n) {
    return n <= 0 ? false : (n & (n - 1)) == 0;
  }
}
複製程式碼


結果:

leetcode 231 2的冪


複製程式碼


相關文章