3 的幂

纯纯的思维题

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x

示例 1:

输入:n = 27
输出:true

示例 2:

输入:n = 0
输出:false

提示:

  • -2^31 <= n <= 2^31 - 1

进阶:

  • 你能不使用循环或者递归来完成本题吗?

思路:

  ①:可以直接除 3 查看最后余数是不是 0 即可 ,简单,时间复杂度为 O(log3n);

       ②:3^19次方 为 int 型 3的幂 的最大值,所以说,只要一个数是  3 的幂次方,它必能被 3 ^ 19整除;

    注意:这并不是快速判断 x 的幂的通用做法,当且仅当 x 为质数可用。

class Solution 
{
    public:
        bool isPowerOfThree(int n) 
        {
            int max_num = (int)pow(3, 19);
            return n > 0 && max_num % n == 0;
        }
};