【LeetCode-326】Power of three 下(C++)

尝试不用递归和循环的方法来完成这道题目(具体题目要求见上篇)

解题思路:如果不用循环和递归的话,能想到的最一般的解法就是用log函数,log(n)/log(3)就表示以3为底的n的对数,我照这个思路写,一直AC不了,查了一下应该是浮点数的舍入问题,我看别人的用JAVA写的就可以AC,但是用C++写不可以。上网上查了一下也没有找到比较好的解决方案。最后看到了一个解法:任何一个3的i次方一定能被最大的3的i次方整除。按照这个思路改了一下代码。

程序实现:

<span style="font-family:SimSun;">class Solution {
public:
    bool isPowerOfThree(int n) {
       if (n <= 0) return 0;
		int i = log(INT_MAX) / log(3);//INT_MAX表示int类型能够表示的最大整数,所以i就是使3的乘方3^i最大的i。
		int t= pow(3, i);//t就是最大的3的i次方
		return t % n == 0;
    }
};</span>

总结:还在网上看到了一个比较新奇的解法就是将n转换成三进制的字符串,再用正则10*(意为1后面跟0个或n个0)匹配算出结果。无奈c++中没有可以直接将n转换为三进制的函数,如果重新用c++写一个三进制转换函数的话就是南辕北辙了(其实是我太懒了!!)。如果碰到判断一个整数n是否为2的幂的话倒是可以用c++试试这个解法。感觉java实现的功能比C++多啊貌似,等我把c++学好了就去看一看java。


参考:

http://blog.csdn.net/ebowtang/article/details/50485622

http://blog.csdn.net/liyuefeilong/article/details/50492885


你可能感兴趣的:(LeetCode,C++,算法)