LeetCode-326. Power of Three

Description

这里写图片描述

Follow Up

这里写图片描述

Solution 1(C++)

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n<3) return n==1? true: false;
        else return 3*(n/3) == n? isPowerOfThree(n/3): false;  
    }
};

Solution 2(C++)

class Solution {
public:
    bool isPowerOfThree(int n) {
        return fmod(log10(n)/log10(3), 1) == 0;
    }
};

Solution 3(C++)

class Solution {
public:
    bool isPowerOfThree(int n) {
        if (n<=0) return false;
        int t = pow(3,(int)(log(INT_MAX)/log(3)));
        return (t%n == 0);
    }
};

算法分析

这道题目是判断一个数是否为3的幂,类似的题目有:LeetCode-231. Power of TwoLeetCode-784. Letter Case Permutation

LeetCode官方多种Java版解法可参考:326. Power of Three Solution

解法一: 那么最简单的方法就是通过迭代,可以利用本身的函数作为迭代函数,但是要注意迭代函数的迭代体与边界条件的设定。类似的题目还可以参考:LeetCode-21. Merge Two Sorted ListsLeetCode-263. Ugly Number

解法二: 就是利用数学的方法来解决,利用对数的换底公式,其实这个公式很简单,高中数学不知道做了多少遍,但是就是不知道在程序算法题中用出来。具体的解释可以参考LeetCode上Solution的解释:Approach #3 Mathematics [Accepted]。

解法三: 该解法就是找到int类型数据范围内:0~2147483647,3的最大次幂,然后如果n是3的幂,那么肯定比最大次幂小于或等于,那么用n去与最大次幂取模运算,其结果一定为0。更加详细具体的解释可以参考LeetCode上Solution的解释:Approach #4 Integer Limitations [Accepted]。

程序分析

这道题的程序编写首先要学会如何进行迭代函数的程序编写,这个过程要慢慢积累。

然后,积累一个新的函数fmod(),其解释可参考:fmod函数

还有log10函数,可参考:CPlusPlus-log10

目前做的LeetCode的Tag是Math,所以已经不止一次遇到了C++中Cmath头文件里的函数了,是时候对其进行一波整理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值