leetcode326(3的幂)
题目如下
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
最简单解法当然是,直接使用顺序遍历查找,就不写代码了。
重点关注的是如何找出的算法,代码如下
就是假设,解出x就可以了,但是需要注意的是java里面的精度,Java使用log之后会有精度损失,比如n为243的时候,x的解是4.9999999,而不是5,于是我们需要对答案精度一定程度的处理,相当于当x非常接近一个整数的时候,就判断他是我们需要的解。
class Solution {
private static final double epsion = 10e-15;
public boolean isPowerOfThree(int n) {
double res = Math.log(n)/Math.log(3);
//floor返回不大于的最大整数,ceil返回不小于的最大整数
return Math.abs(res - Math.round(res)) < epsion;
}
}