题目链接:https://leetcode.com/problems/power-of-three/
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?
思路:让求一个数是不是3的幂, 有三种解法, 一种是循环的, 一种是数学的, 另一种有点耍小技巧
两种代码如下:
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0) return false;
while(n != 1)
{
if(n%3 != 0)
{
cout <<n << " "<< n%3 << endl;
return false;
}
n = n/3;
}
return true;
}
};
class Solution {
public:
bool isPowerOfThree(int n) {
return n>0?!(1162261467 % n):0;
}
};
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0) return false;
return ((int)pow(3, (int)(log(INT_MAX)/log(3))) % n) == 0;
}
};
参考: https://leetcode.com/discuss/98941/c-solution-no-loop-recursion