天天看點

<LeetCode天梯>Day044 3的幂(正常解法+遞歸法+算術表達式+最後一種) | 初級算法 | Python

以下為我的天梯積分規則:

每日至少一題:一題積分+10分

若多做了一題(或多一種方法解答),則當日積分+20分(+10+10)

若做了三道以上,則從第三題開始算+20分(如:做了三道題則積分-10+10+20=40;做了四道題則積分–10+10+20+20=60)

初始分為100分

若差一天沒做題,則扣積分-10分(周六、周日除外注:休息)

堅持!!!

初級算法

刷題目錄

數學

<LeetCode天梯>Day044 3的幂(正常解法+遞歸法+算術表達式+最後一種) | 初級算法 | Python
<LeetCode天梯>Day044 3的幂(正常解法+遞歸法+算術表達式+最後一種) | 初級算法 | Python

題幹

給定一個整數,寫一個函數來判斷它是否是 3 的幂次方。如果是,傳回 true ;否則,傳回 false 。

整數 n 是 3 的幂次方需滿足:存在整數 x 使得 n == 3x

示例1:

輸入:n = 27

輸出:true

示例2:

輸入:n = 0

輸出:false

示例3:

輸入:n = 9

示例4:

輸入:n = 45

正常法

分析:

數學問題都還相對簡單,我們對3進行整除,除到不等于3為止,再判斷傳回n是否等于1。

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        if n > 0:
            while n % 3 == 0:
                n /=3
        return n == 1      
<LeetCode天梯>Day044 3的幂(正常解法+遞歸法+算術表達式+最後一種) | 初級算法 | Python

中規中矩!

遞歸法

遞歸就隻需要傳回一行就搞定。

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        return n > 0 and (n==1 or (n%3==0 and self.isPowerOfThree(n/3)))      
<LeetCode天梯>Day044 3的幂(正常解法+遞歸法+算術表達式+最後一種) | 初級算法 | Python

算術表達式

class Solution:
    def isPowerOfThree(self, n: int) -> bool:

        return (log10(n) / log10(3)) % 1 == 0      

理論上是可以的,不知道為啥出了戳!~

最後一種

來自評論區大佬的解法,絕了:

題中n的範圍是-2^31 <= n <= 2^31 - 1,而在這個範圍内3的最大幂是1162261467,在比他大就超過int表示的範圍了,我們直接用它對n求餘即可,過求餘的結果是0,說明n是3的幂次方

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        return (n > 0 and 1162261467 % n ==0)      
<LeetCode天梯>Day044 3的幂(正常解法+遞歸法+算術表達式+最後一種) | 初級算法 | Python