码迷,mamicode.com
首页 > 其他好文 > 详细

326. Power of Three

时间:2016-01-13 12:50:23      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

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?

思路1:利用递归函数解决问题,如果n<=0,返回false。如果n==1,返回true。如果n能够被3整除,用n/3递归调用函数。否则,说明n不能被3整除,自然不可能是3的幂,返回false。

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n<=0)
            return false;
        if(n==1)
            return true;
        if(n%3==0)
            return isPowerOfThree(n/3);
        return false;
            
    }
};
思路2:利用log函数,如果log3(n)为整数,那么说明n为3的幂。但是,利用log函数会出现四舍五入的问题,这是由精度造成的。我们可以采取特殊措施,判断n是否等于3的log3(n)次方,为了规避round off error,我们取pow(3,round(log3(n))),round函数对计算出来的log3(n)做了四舍五入。
class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n<1)
            return false;
        return n==pow(3,round(log(n)/log(3)));
    }
};

 

 



326. Power of Three

标签:

原文地址:http://www.cnblogs.com/zhoudayang/p/5126842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!