给定一个整数,写一个函数来判断它是否是 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
进阶:你能不使用循环或者递归来完成本题吗?
解法一
判断 Math.pow(3,i) 是否等于 n ,i 从 0 递增到 i 的平方根。
typescript
function isPowerOfThree(n: number): boolean {
let result = false
let i = 0
const k = Math.sqrt(n)
while(i < k) {
if(Math.pow(3,i) === n) {
return true
}
i++
}
return result
};
解法二
不断地将 n 除以 3,直到 n=1,如果在这个过程中遇到除不尽的情况,则说明 n 不是 3 的幂。
kotlin
function isPowerOfThree(n: number): boolean {
if(n<=0) return false
while(n > 1) {
if (n % 3 !== 0) {
return false
}
n /=3
}
return true
};
解法三
在题目给定的 32 位有符号整数的范围内,最大的 3 的幂为 3^19 = 1162261467 。我们只需要判断 n 是否是 1162261467 的约数即可。
typescript
function isPowerOfThree(n: number): boolean {
return n > 0 && 1162261467 % n===0
};