326. 3 的幂
题目描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 3 的幂次方需满足:存在整数 x
使得 n == 3x
示例 1:
输入:n = 27 输出:true
示例 2:
输入:n = 0 输出:false
示例 3:
输入:n = 9 输出:true
示例 4:
输入:n = 45 输出:false
提示:
-231 <= n <= 231 - 1
进阶:你能不使用循环或者递归来完成本题吗?
解法
方法一:试除法
如果 $n \gt 2$,我们可以不断地将 $n$ 除以 $3$,如果不能整除,说明 $n$ 不是 $3$ 的幂,否则继续除以 $3$,直到 $n$ 小于等于 $2$。如果 $n$ 等于 $1$,说明 $n$ 是 $3$ 的幂,否则不是 $3$ 的幂。
时间复杂度 $O(\log_3n)$,空间复杂度 $O(1)$。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 |
|
1 2 3 4 5 6 7 |
|
方法二:数学
如果 $n$ 是 $3$ 的幂,那么 $n$ 最大是 $3^{19} = 1162261467$,因此我们只需要判断 $n$ 是否是 $3^{19}$ 的约数即可。
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
1 2 3 |
|
1 2 3 4 5 |
|
1 2 3 4 5 6 |
|
1 2 3 |
|