题目
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
Subscribe to see which companies asked this question.
思路
- 遍历判断树是否能被3整除,能的话就一直除遍历,直到为1为止,否则不能。
- 判断n是否是3的指数,就是判断n是否是int范围内最大的3的指数的因数
代码
遍历相除法,runTime有65ms,只超过了27.5%
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0)
{
return false;
}
while(n % 3 == 0)
{
n /= 3;
}
if(n == 1)
{
return true;
}
return false;
}
};
判断因数法,runTime降到52ms,超过了80%
class Solution {
public:
// 3^19, 3^20 = 3486784401 > MaxInt32
int const Max3PowerInt = 1162261467;
// 2^31 - 1
int const MaxInt32 = 2147483647;
bool isPowerOfThree(int n) {
if (n <= 0 || n > Max3PowerInt) return false;
return Max3PowerInt % n == 0;
}
};