题目大意:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27 输出: true
示例 2:
输入: 0 输出: false
示例 3:
输入: 9 输出: true
示例 4:
输入: 45 输出: false
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n <= 0:
return False
if n == 1:
return True
while n > 1:
if(n % 3 != 0):
return False
n /= 3
return True
以下是Java版本:
【思路】
不用循环和递归,则:
3^x=n
log(3^x) = log(n)
x log(3) = log(n)
x = log(n) / log(3)
由于JAVA double浮点型的问题,需判断Math.abs(x - Math.round(x)) < 10e-15
1. public class Solution {
2. public boolean isPowerOfThree(int n) {
3. double temp = 10e-15;
4. if(n==0) return false;
5.
6.
7. double res = Math.log(n) / Math.log(3);
8. return Math.abs(res-Math.round(res)) < temp;
9. }
10. }