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 |
|