题目描述:

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 ​​true​​​ ;否则,返回 ​​false​​​ 。整数 ​​n​​​ 是 3 的幂次方需满足:存在整数 ​​x​​ 使得

示例 1:

输入:n = 27
输出:true

示例 2:

输入:n = 0
输出:false

示例 3:

输入:n = 9
输出:true

示例 4:

输入:n = 45
输出:false

提示:

进阶:

  • 你能不使用循环或者递归来完成本题吗?

题目分析:

用循环很快就能解出此题, ​​n%3​​​ 只要余数为 ​​0​​​,就一直将 ​​n​​​ 除以 ​​b​​​ 。因此,应该可以将 ​​n​​​ 除以 ​​b​​​ x 次,每次都有 ​​0​​​ 的余数,最终结果是 ​​1​​​ 。最后加一个判断,检查 ​​n == 1​​​,否则 while 循环将永远不会结束。下面介绍一种不用循环解决的方法。利用对数解决此题,假设 ,如果 ​​n​​​ 是 ​​3​​​ 的整数次方,那么 ​​m​​​ 一定就是一个整数。所以,我们直接调用 ​​Math.log10(n) / Math.log10(3)​​​ 并与 ​​1​​​ 取余,如果余数为 ​​0​​​ 则该数是 ​​3​​ 的幂次方。

题解:

执行用时: 16 ms

内存消耗: 38.1 MB

class Solution {
public boolean isPowerOfThree(int n) {
// log10(n) 除于 Math.log10(3) 模 1 如果是 3 的幂则为 0
return Math.log10(n) / Math.log10(3) % 1 == 0;
}
}

题目来源:力扣(LeetCode)