LeetCode 第 326 題 (Power of Three)

liyuanbhu發表於2016-04-19

LeetCode 第 326 題 (Power of Three)

Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?

這道題的常規的思路是不停的除以 3,如果能除盡就說明是 power of three。下面是程式碼:

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n <= 0) return false;
        do
        {
            if( !(n & 1) ) return false;
            if( n == 1 ) return true;
            if(n % 3) return false;
            n = n / 3;
        }while(n > 0);
        return false;
    }
};

其實所有這種型別的題還有一個統一的簡便的做法。利用的是計算機中整數所能表示的數字是有限的這個特點。 自然數中 3N

3^N
有無窮多個。但是可以用 int 型別表示的卻不多。這其中最大的那個是 1162261467。其餘的 3N
3^N
型的數 x
x
都是這個數的約數。也就是說 1162261467 可以被 x
x
整除。

按照這個思路,有下面的程式碼:

class Solution {
public:
    bool isPowerOfThree(int n) {
        if(n <= 0) return false;
        return 1162261467 % n == 0;
    }
};

相關文章