LeetCode 3的幂

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

输入: 27
输出: true

示例 2:

输入: 0
输出: false

示例 3:

输入: 9
输出: true

示例 4:

输入: 45
输出: false

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

方法一:暴力递归法。

class Solution {
public:
    bool isPowerOfThree(int n) {
        if (n == 1){//3的0次幂
            return true;
        }
        else if (n != 0 && n % 3 == 0){//如果3是该数的因子
            return isPowerOfThree(n / 3);//继续判断
        }
        else{
            return false;
        }
    }
};

LeetCode 3的幂
方法二:使用循环,蛮力求解。

class Solution {
public:
    bool isPowerOfThree(int n) {
        while (n != 0){
            if (n == 1){//3的0次幂
                return true;
            }
            else if (n % 3 == 0){//3是该数的因子
                n /= 3;
            }
            else{//否则退出
                break;
            }
        }
        return false;
    }
};

LeetCode 3的幂
方法三:通过翻阅评论,发现了这个解法,用到了数论的知识,3的幂次的质因子只有3,而所给出的n如果也是3的幂次,故而题目中所给整数范围内最大的3的幂次的因子只能是3的幂次,1162261467是3的19次幂,是整数范围内最大的3的幂次。

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

LeetCode 3的幂