[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的冪。
程序中最好不採用任何循環和遞歸。

思路:下面給出兩種解法,第一種爲常規解法,採用循環。利用3的冪次方的數可表示爲: n = 1* 3^n;
第二種解法思路:32bit的整數中最大的3的冪次方數爲1162261476。那麼任何3的冪次方數 m與這個最大數有如下關係: 1162261467 = m * 3^n.

解法一(有循環,效率差):

bool isPowerOfThree(int n) {
   if(n < 1)
        return 0;

    while( !(n%3) )
        n /= 3;

    return n == 1;
}

解法二(無循環):

bool isPowerOfThree(int n) {
     return n > 0 && !(1162261467%n);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章