• LeetCode 326 Power of Three(3的幂)(递归、Log函数)


    翻译

    给定一个整型数,写一个函数决定它是否是3的幂(翻译可能不太合适……
    
    跟进:
    你能否够不用不论什么循环或递归来完毕。

    原文

    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?

    分析

    题意我事实上不是满懂,比方说12究竟可不能够呢?还是说仅仅有:3、9、27、81这样的才行呢?先写个简单的递归试试看吧。

    bool isPowerOfThree(int n) {
        if (n == 1) return true;
        else if (n == 0) return false;
        else if (n % 3 == 0)
            return isPowerOfThree(n / 3);
        else return false;
    }

    提交成功了,那么自己用12作为參数来试试呢,发现返回false。那么就能够断定题意是上面我说的另外一种了。

    是否还记得log函数呢。之前有一道题遇到过。所以这次一下就想到了……

    logn3

    假设以12来计算的话:

    log123=2.26186

    int(log123)=2

    log123int(log123)=0.26186

    所以直接推断结果是否为0就好了……

    bool isPowerOfThree(int n) {
        double logAns= log(n) / log(3);             
        return (logAns- int(logAns) == 0) ? true : false;
    }

    然而这段代码提交后发现仍然是错误的,243在上面的代码中竟然是false。打断点看看应该是因为精度问题,所以继续改改。

    logn3=logn10log310

    所以代码就出来了……

    代码

    class Solution {
    public:
        bool isPowerOfThree(int n) {
            double logAns = log10(n) / log10(3);
            return (logAns - int(logAns) == 0) ?

    true : false; } };

  • 相关阅读:
    并发编程(2)-进程、并发和并行讲解
    并发编程(5)-管道、数据共享、进程池
    并发编程(4)-进程中的锁、信号量、 事件和队列
    人工智能及数学运算的基础方法
    并发编程(3)-进程模块
    判断一个数是否是水仙花数
    js中隐式类型转换测试
    webpack使用webpack-dev-middleware进行热重载
    网页打包安卓APP流程
    「postgres」查看数据库连接数
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7365759.html
Copyright © 2020-2023  润新知