326. 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?

思路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)));
    }
};



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