题目
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 3 的幂次方需满足:存在整数 x
使得 n == 3^x
示例1:
1 | 输入: 27 |
示例2:
1 | 输入: 0 |
示例3:
1 | 输入: 9 |
示例4:
1 | 输入: 45 |
提示:
-2^31 <= n <= 2^31 - 1
进阶
你能不使用循环或者递归来完成本题吗?
解法
解法一:
递归
Java
1 | class Solution { |
解法二:
循环
Java
1 | public boolean isPowerOfThree(int n) { |
解法三:
数学方法
Java
1 | public boolean isPowerOfThree(int n) { |
解法四:
使用库函数,转换成3进制的数的字符串,然后判断字符串是否只包含一个1.
Java
1 | public boolean isPowerOfThree(int n) { |
解法五:
整数限制
我们现在可以推断出 n
的最大值,也就是 3 的幂,是 1162261467。因此,我们应该返回 true 的 n 的可能值是 3,9…3 的19次方。因为 3 是质数,所以 3的19次方 的除数只有 3,9,27,3的19次方,因此我们只需要将 3的19次方 除以 n。若余数为 0 意味着 n 是 3的19次方 的除数,因此是 3 的幂。
Java
1 | public class Solution { |