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;
};

參考資料