问题描述
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
补充说明:
这个题目的要求通过实现一个函数,当输入一个数字的时候,如果这个数字是3的幂(次方),则返回True。
另外这里有个小小的要求,就是在实现功能的前提下,要求尽量不要用循环或者递归实现。
方案分析
- 首先说使用循环的方式,因为是3的幂,肯定满足的一个条件就是循环除以3,肯定有一次能被整除。so easy。上代码。
python实现
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n<=0:
return False
while(n%3==0):
n = n / 3
return True if n==1 else False
方案分析2
- 既然会求幂,反过来就是求log了,那么使用log函数去解决这个问题,但是这里有个问题,看注释部分。
python实现2
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
import math
epsilon = 0.000000000000001
if n <= 0:
return False
# return ((math.log(n, 3) + epsilon) % 1 ) <= 2 * epsilon
# 这块无效,java可以用,但是python无效,应该是各自的机制不同,取决于对浮点数除法的精度是多少,可以自行试试。或者有好的想法可以留言。
return 3 ** round((math.log(n, 3))) == n