leetcode_326. Power of Three分析

该博客分析了如何确定一个整数是否为3的幂。提供了四种解法,包括常规方法、利用3的幂的范围进行整除检查、创建3的幂的表格以及运用数学中的换底公式结合浮点数判断来解决这个问题。
摘要由CSDN通过智能技术生成

类似的题解详见:
leetcode_232. Power of Two分析
leetcode_342. Power of Four分析
题目链接
【题目】
Given an integer, write a function to determine if it is a power of three.
【分析】
解法1:
一般做法

class Solution {
public:
    bool isPowerOfThree(int n) {
        while (n && n % 3 == 0) {
            n /= 3;
        }
        return n == 1;
    }
};

解法2:
由于输入是int,正数范围是0-2**31,在此范围中允许的最大的3的次方数为319=1162261467,那么我们只要看这个数能否被n整除即可

class Solution {
public:
    bool isPowerOfThree(int n) {
        return (n > 0 && 1162261467 % n == 0);
    }
};

解法3:
根据解法2我们很容易想到的解法,就是将3**0 到3**19打表出来

class Solution {
public:
    bool isPowerOfThree(int n) {
        int power_list[20] = {1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467};
        for( int num:power_list )
            if( num == n ) return true;
        return false;
    }
};

解法4:
这是discuss中一种比较巧妙地方法,利用我们数学中的换底公式
log a (b) = log c (b) / log c (a)
如果n是3的倍数,则log 3 (n)一定是整数,我们利用换底公式可以写为log 3 (n) = log 10 (n) / log 10 (3)
在c++中判断数字a是否为整数,我们可以用 a - int(a) == 0 来判断

class Solution {
public:
    bool isPowerOfThree(int n) {
        return (n > 0 && int(log10(n) / log10(3)) - log10(n) / log10(3) == 0);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值