题目:
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: falseFollow up: Could you do it without using any loop / recursion?
解释:
判断一个数是不是3
的次幂。
python代码:
递归写法:
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n<=0:
return False
if n==1:
return True
return n%3==0 and self.isPowerOfThree(n/3)
循环写法:
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n<=0:
return False
while n>1:
if n%3!=0:
return False
n/=3
return True
log解法感觉会有精度问题所以不表
一种奇技淫巧,int 范围内最大的3的次幂是319= 1162261467
from math import log
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n<=0:
return False
return 3**19%n==0
以上三种解法的c++代码分别如下:
递归:
class Solution {
public:
bool isPowerOfThree(int n) {
if (n<=0)
return false;
if(n==1)
return true;
return (n%3==0)&&isPowerOfThree(n/3);
}
};
循环:
class Solution {
public:
bool isPowerOfThree(int n) {
if (n<=0)
return false;
while (n>1)
{
if (n%3!=0)
return false;
n/=3;
}
return true;
}
};
奇技淫巧:
class Solution {
public:
bool isPowerOfThree(int n) {
if (n<=0)
return false;
return (int)pow(3,19)%n==0;
}
};
总结:
最后一种解法真是惊到我了。