原题链接:Power of Three
题目内容:
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.
判断给定的整数是否是3的n次方数,题目希望使用非递归方式
Python.01
普通递归(不推荐)
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n <= 0:
return False
while n%3 == 0:
n /= 3
return n == 1
Python.02
利用对数知识,loga(b) = logc(b) / logc(a)
理论可行,但是我LeetCode引用numpy失败。
from numpy import log10
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
res = log10(n) / log10(3)
return res - int(res) == 0
C++
对数的C++版本
class Solution {
public:
bool isPowerOfThree(int n) {
double res = log10(n) / log10(3);
return (res - int(res) == 0) ? true : false;
}
};
Python.03
任何一个3的x次方一定能被范围内最大的3的x次方整除,int型最大的3的x次方数是1162261467 。略取巧
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
return n > 0 and 1162261467 % n == 0