1. 题目来源
链接:326. 3的幂
2. 题目解析
只会试除法和枚举 3 的倍数的方法。
最秀的一种,在 int
范围内,最大的 3 的幂是
3
19
=
1162261467
3^{19}=1162261467
319=1162261467。那么任意一个 3^x
都是 3^19 的约数。故直接取模即可。
顺便提一个 a % b = a − a b ∗ b a\%b=a- \frac a b *b a%b=a−ba∗b,这是编程语言中的取模。数学意义下,负数情况与之不同。 自己可以试试。
- 时间复杂度: O ( l o g n ) O(logn) O(logn)
- 空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:
bool isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
};
class Solution {
public:
bool isPowerOfThree(int n) {
while (n && n % 3 == 0) {
n /= 3;
}
return n == 1;
}
};