326. Power of Three

Leetcode 问题: 326. Power of Three

题目

Given an integer n, return true if it is a power of three. Otherwise, return false.

An integer n is a power of three, if there exists an integer x such that n == 3x.

传入一个整数 n,如果是 3 的次方(3^x),则回传 true,不是的话回传 false

Example

Input: n = 27
Output: true
Input: n = 0
Output: false
Input: n = 9
Output: true

演算法

1. 判断是否能被 3 整除

假如检查的数字无法被 3 整除,那他一定不是 3 的因数,直接回传 false

2. 除以 3 继续检查

有可能这个数字是 3 的因数,但不是 3 的次方数,所以除以 3 后继续检查

3. 检查最后数字是否被 3 除完了

如果最后检查的数字是 1(3/3=1),表示被 3 整除完了,那这个是 3 的次方数,回传 true

假如不是 1 的话回传 false

答案

JavaScript

function isPowerOfThree(checkNumber) {
    while (checkNumber >= 3) {
        if (checkNumber % 3 != 0) {
            // 假如检查的数字无法被 3 整除,那他一定不是 3 的因数,直接回传 false
            return false;
        }
        // 除以 3,继续检查
        checkNumber = checkNumber / 3;
    }
    var isPowerOfThreeResult = false;
    if (checkNumber == 1) {
        // 如果最后检查的数字是 1(3/3=1),表示被 3 整除完了,那这个是 3 的次方数
        isPowerOfThreeResult = true;
    }
    return isPowerOfThreeResult;
}

TypeScript

function isPowerOfThree(checkNumber: number): boolean {
    while (checkNumber >= 3) {
        if (checkNumber % 3 != 0) {
            // 假如检查的数字无法被 3 整除,那他一定不是 3 的因数,直接回传 false
            return false;
        }

        // 除以 3,继续检查
        checkNumber = checkNumber / 3;
    }

    let isPowerOfThreeResult = false;
    if (checkNumber == 1) {
        // 如果最后检查的数字是 1(3/3=1),表示被 3 整除完了,那这个是 3 的次方数
        isPowerOfThreeResult = true;
    }

    return isPowerOfThreeResult;
};

参考资料