以下为我的天梯积分规则:
每日至少一题:一题积分+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
输出:true
示例4:
输入:n = 45
输出:false
常规法
分析:
数学问题都还相对简单,我们对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)