给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
解法1:循环
class Solution {
public:
bool isPowerOfThree(int n) {
if(n==1) return true;
long m=1;
while(m<n)
{
m*=3;
if(m==n)
return true;
}
return false;
}
};
解法2:递归
class Solution {
public:
bool isPowerOfThree(int n) {
if(n==1) return true;
else if(n==0) return false;
else return isPowerOfThree(n/3)&&n%3==0;
}
};
解法3:
3的幂次质因子只有3,而整数范围内的3的幂次最大是1162261467
class Solution {
public:
bool isPowerOfThree(int n) {
return n > 0 && 1162261467%n == 0;
}
};