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

【LeetCode 簡單題】76-3的冪

宣告:

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

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

正文

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

示例 1:

輸入: 27
輸出: true

示例 2:

輸入: 0
輸出: false

示例 3:

輸入: 9
輸出: true

示例 4:

輸入: 45
輸出: false

進階:
你能不使用迴圈或者遞迴來完成本題嗎?

解法1。輸入是int,最大是2^31\approx3^19,如果輸入是3的冪,必然滿足大於0且能被3^19整除,程式碼如下。

執行用時: 184 ms, 在Power of Three的Python提交中擊敗了52.39% 的使用者

import math
class Solution(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n > 0 and math.pow(3,19) % n == 0

解法2。細化一下還是用迴圈做做,對3的冪的性質有更進一步的瞭解,首先能整除3,程式碼如下。

執行用時: 180 ms, 在Power of Three的Python提交中擊敗了58.93% 的使用者

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

 解法3。用遞迴試試,順便熟悉一下的套路。思路非常的清晰,基線條件從0-3都列舉出來了,程式碼如下。

執行用時: 176 ms, 在Power of Three的Python提交中擊敗了66.33% 的使用者

class Solution(object):
    def isPowerOfThree(self,n):
        if n == 0:
            return False
        if n == 1:
            return True
        if n == 2:
            return False
        if n == 3:
            return True
        if n%3 == 0 and n > 3:
            return self.isPowerOfThree(n/3)     # 注意這裡一定要return
        else:
            return False

結尾

解法1:https://blog.csdn.net/qq_34364995/article/category/7655706

解法2&解法3:LeetCode