leetcode-326-3的幂
- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
[博客链接]
[题目链接]
[github地址]
[题目描述]
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x
示例 1:
输入:n = 27 输出:true 示例 2:
输入:n = 0 输出:false 示例 3:
输入:n = 9 输出:true 示例 4:
输入:n = 45 输出:false
提示:
- <= n <= - 1
思路一:递归
- 递归函数求解即可
- 分两个条件进行判断
n == 0直接返回false- 否则判断是否能够被3整除
public boolean isPowerOfThree(int n) {
if (n == 0) return false;
return n == 1 || (n % 3 == 0 && isPowerOfThree(n /= 3));
}
- 时间复杂度O(lgn)
- 空间复杂度O(1)
思路二:数学
- 可以通过判断是否能够被给定范围内的3的整数次幂最大值整除
- 通过运算可以得知最大不超过
- 判断即可
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
- 时间复杂度O(1)
- 空间复杂度O(1)
思路三:打表
- 算出范围内所有3的幂数
- 存入hash,判断是否在结构体中即可
class Solution {
static Set<Integer> set = new HashSet<>();
static {
int cur = 1;
set.add(cur);
while (cur <= Integer.MAX_VALUE / 3) {
cur *= 3;
set.add(cur);
}
}
public boolean isPowerOfThree(int n) {
return n > 0 && set.contains(n);
}
}
- 时间复杂度O(1)
- 空间复杂度O(lgn)