以下為我的天梯積分規則:
每日至少一題:一題積分+10分
若多做了一題(或多一種方法解答),則當日積分+20分(+10+10)
若做了三道以上,則從第三題開始算+20分(如:做了三道題則積分-10+10+20=40;做了四道題則積分–10+10+20+20=60)
初始分為100分
若差一天沒做題,則扣積分-10分(周六、周日除外注:休息)
堅持!!!
初級算法
刷題目錄
數學
題幹
給定一個整數,寫一個函數來判斷它是否是 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
中規中矩!
遞歸法
遞歸就隻需要傳回一行就搞定。
class Solution:
def isPowerOfThree(self, n: int) -> bool:
return n > 0 and (n==1 or (n%3==0 and self.isPowerOfThree(n/3)))
算術表達式
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)