
试除法
| 解题思路:时间复杂度O(
l
o
g
3
n
log_3n
log3n),空间复杂度O(
1
1
1) |
|---|
- 我们知道3的幂次方一定是若干个3相乘
- 我们不断对这小子除3,如果某一次除3后,发现无法被3取余。则证明这小子就不是3的幂

class Solution {
public boolean isPowerOfThree(int n) {
while (n != 0 && n % 3 == 0) {
n /= 3;
}
return n == 1;
}
}
是否是最大的3的幂的约数
| 解题思路:时间复杂度O(
1
1
1),空间复杂度O(
1
1
1) |
|---|
- 这个是投机取巧法:如果当前n是最大的3的幂的约数的话,证明n为3的幂
- 关键是最大的3的幂是谁,题目给定的是32为有符号,则最大的3的幂为
3
1
9
=
1162261467
3^19 = 1162261467
319=1162261467,但是这个方法肯定不能对负数用。

class Solution {
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
}