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整除,不能直接返回false,能的话继续除以3,直到最后结果是1(3/3)或者0(2/3, 1/3)——其实还是看能不能整除。
非递归的话,就是看log3(n)是不是个整数。看一个数是不是整数只要强转成int,再转回float或double然后和原来的数比较就好。这里因为没有log3()这个函数,所以依照换底公式,用log10(n)/log10(3) 来做。记得不能使用log()函数,因为e本身就是个无限不循环小数,会发生精度问题。
解:
//递归
class Solution {
public:
bool isPowerOfThree(int n) {
if(n == 0)
return false;
else if(n == 1)
return true;
if(n % 3 == 0)
return isPowerOfThree(n/3);
else
return false;
}
};
//非递归
class Solution {
public:
bool isPowerOfThree(int n) {
return ((double)(int)(log10(n)/log10(3)) == (log10(n)/log10(3))) ? true: false;
}
};