1. 程式人生 > >【LeetCode 簡單題】61-2的冪

【LeetCode 簡單題】61-2的冪

宣告:

今天是第61道題。給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

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

示例 1:

輸入: 1
輸出: true
解釋: 20 = 1

示例 2:

輸入: 16
輸出: true
解釋: 24 = 16

示例 3:

輸入: 218
輸出: false

解法1。利用觀察得出規律,如果n是2的若干次冪,那麼n的2進製表示肯定是高位1其他全0,n和n-1的與肯定是全0。

執行用時: 28 ms, 在Power of Two的Python提交中擊敗了99.84% 的使用者

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 0:
            return False
        if n == 1:
            return True
        res = n&(n-1)    # 如果n是2的若干次冪,n的二進位制表示最高位為1其他全0,和n-1相與的話一定是全0
        if res == 0:
            return True
        else:
            return False

解法2。n除以2,遍歷條件是n是2的倍數以及n>1,那麼除到最後如果n是2的冪,那麼肯定為1。

執行用時: 36 ms, 在Power of Two的Python提交中擊敗了39.53% 的使用者

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        while n%2 ==0 and n>1:
            n /= 2
        return n=1
        

解法3。等比增加2的倍數和n相比較,如果恰好找到,返回True,若n更大,則等比增加,若n更小,那麼返回False。

執行用時: 36 ms, 在Power of Two的Python提交中擊敗了39.53% 的使用者

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        for i in range(32):
            if n == pow(2,i):   
                return True
            if n > pow(2,i):
                continue
            else:
                return False
        return False

結尾

解法1:https://blog.csdn.net/ymmbjcz/article/details/78645896

解法2&解法3:LeetCode