LeetCode 231 2的冪 題解

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

示例 1:

輸入: 1
輸出: true
解釋: 20 = 1
示例 2:

輸入: 16
輸出: true
解釋: 24 = 16
示例 3:

輸入: 218
輸出: false

 

看到這個題目,第一反應是除二除二。。然後用了個遞歸實現:

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n == 1) return true;    //一開始是1的情況
        if(n % 2 != 0) return false;
        if(n == 0) return false;   //一開始是0的情況
        return isPowerOfTwo(n/2);
    }
}

 

參考評論答案,還有更優的解法,利用二進制來計算

class Solution {
    public boolean isPowerOfTwo(int n) {
           return n>0 && (n&(n-1))==0;
    }
}

比如16,二進制表示爲10000,16-1=15,二進制爲01111,進行相與運算,等於0,凡是二次冪的數, (n&(n-1))==0;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章