您的位置:首页 > 编程语言 > Go语言

LeetCode Algorithms #326 <Power of Three>

2016-02-23 18:39 441 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: