![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f6596dba70d65485c9c28cb3166b2e69.png)
试除法
解题思路:时间复杂度O(
l
o
g
3
n
log_3n
log3n),空间复杂度O(
1
1
1) |
---|
- 我们知道3的幂次方一定是若干个3相乘
- 我们不断对这小子除3,如果某一次除3后,发现无法被3取余。则证明这小子就不是3的幂
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c6ee5d0a12da8ecc692f8f4f7db1a2b1.png)
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,但是这个方法肯定不能对负数用。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5ed5ae502ae9bc64367c6691b996f76e.png)
class Solution {
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
}