326. 3的幂
Given an integer, write a function to determine if it is a power of three.
Example 1:
Input: 27
Output: true
Example 2:
Input: 0
Output: false
Example 3:
Input: 9
Output: true
Example 4:
Input: 45
Output: false
Follow up:
Could you do it without using any loop / recursion?
Python代码实现:
1.循环
拙劣的手法:
class Solution:
def isPowerOfThree(self, n):
if n == 1:
return True
m = n
k = 0
while True:
if n *3**k <= m and n >=3:
if n / 3 == 1:
return True
break
else:
n = n / 3
k += 1
else:
return False
break
看到人家写的是真漂亮。。。
class Solution:
def isPowerOfThree(self, n):
if n <= 0:
return False
while n % 3 == 0:
n //= 3
return n == 1
2.递归:终止条件:一直除到1为true,中间出现不能被3整除的数false
class Solution:
def isPowerOfThree(self, n):
if n <= 0:
return False
if n == 1:
return True
if n % 3 != 0:
return False
return self.isPowerOfThree(n // 3)
3.进阶
考虑到注释里的 type n: int,而int类型中,最大的3的幂是3^{19} , 所以可以直接判断数n能否被3^{19}整除即可(当然,小于等于0的情况需要另外考虑
class Solution:
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
return n > 0 and 3**19 % n == 0
全能通过