zoukankan      html  css  js  c++  java
  • 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)));
        }
    };



  • 相关阅读:
    简单工厂模式_C#_设计模式
    单例模式_C#设计模式
    快速排序_排序算法_算法
    关于缓存C#
    网络编程的4种IO模型
    一些自己总结
    驱动漏洞中的__try和ProbeForRead
    poj2318
    poj1113
    poj 1904
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5126842.html
Copyright © 2011-2022 走看看