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