【LeetCode-数学】3的幂

题目描述

给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例:

输入: 27
输出: true

输入: 45
输出: false

进阶: 你能不使用循环或者递归来完成本题吗?
题目链接: https://leetcode-cn.com/problems/power-of-three/

思路1

将 n/3,如果最后能的结果为 3,则说明 n 是 3 的幂,返回 true,否则返回 false。在每次 n 除以 3 之前,还要判断 n 能不能被 3 整除,如果不能直接返回 false。

代码如下:

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n==1 || n==3) return true;

        while(n>=3){
            if(n%3!=0) return false;
            if(n==3) return true;
            n /= 3;
        }
        return false;
    }
};

思路2

如果 n 是 3 的幂,则有

\[n = 3^a \\ \log n = a \log 3 \\ a = \frac{\log n}{\log 3} \]

根据上面的公式计算 a,如果 n 是 3 的幂,则 a 是整数,否则 a 不是整数。

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n<=0) return false;
        
        double a = log10(n) / log10(3);
        return a==floor(a);
    }
};
posted @ 2020-07-16 16:50  Flix  阅读(372)  评论(0编辑  收藏  举报