326. Power of Three
题目描述和难度
- 题目描述:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27 输出: true
示例 2:
输入: 0 输出: false
示例 3:
输入: 9 输出: true
示例 4:
输入: 45 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
- 题目难度:简单。
- 英文网址:326. Power of Three 。
- 中文网址:326. 3的幂 。
思路分析
求解关键:解法还蛮多的,下面给出几个比较好理解的。
1、打表法,把所有可能的结果都列出来,放入哈希表中判断;
2、
参考解答
参考解答1
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class Solution {
// 打表法
public boolean isPowerOfThree(int n) {
int[] nums = new int[]{1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467};
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
return set.contains(n);
}
public static void main(String[] args) {
List<Integer> res = new ArrayList<>();
int n = 1;
System.out.println(Integer.MAX_VALUE);
while (n > 0 && n < 2147483647) {
res.add(n);
n = n * 3;
}
System.out.println(res);
}
}
参考解答2
public class Solution2 {
/**
* 因为 3 是质数,用 3 的方幂的最大值去整除这个待检测的数即可
*
* @param n
* @return
*/
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
}
参考解答3
public class Solution3 {
/**
* 转换成一个 3 进制的数,它的字符串表示一定是以 1 开头,后面全部是 0
*
* @param n
* @return
*/
public boolean isPowerOfThree(int n) {
return n > 0 && Integer.toString(n, 3).matches("^10*$");
}
public static void main(String[] args) {
int num = 27;
System.out.println(Integer.toString(num, 3));
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0326-power-of-three ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。