给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27 输出: true
示例 2:
输入: 0 输出: false
示例 3:
输入: 9 输出: true
示例 4:
输入: 45 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
https://leetcode-cn.com/problems/power-of-three/description/
public boolean isPowerOfThree(int n) {
//方法1
//转化为三进制,3 的幂次方必定为1000000形式
String three = Integer.toString(n, 3);
//只包含一个1且在0位,且不包含2
return three.lastIndexOf("1") == 0 && three.indexOf("2") == -1;
//方法2
//3^19 = 1162261467为Integer.MAX_VALUE 下的所有3幂次方数的最小公倍数
return n > 0 && (1162261467 % n == 0);
//方法3
//求对数可能存在不少误差..
return Math.log10(n)/Math.log10(3) % 1 == 0;
//方法4
// 递归、循环,略
}