原題鏈接: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