LeetCode:Power of Three - 數字三的冪

一、題目名稱java

Power of Three(數字三的冪)函數

二、題目地址code

https://leetcode.com/problems/power-of-three/three

三、題目內容leetcode

英文:Given an integer, write a function to determine if it is a power of three.開發

中文:給定一個整數,寫一個函數判斷該數是否爲數字3的冪字符串

四、解題方法1get

對於本題而言,暴力破解法的效率並不算低。it

Java代碼以下:io

/**
 * @功能說明:LeetCode 326 - Power of Three
 * @開發人員:Tsybius2014
 * @開發時間:2016年1月11日
 */
public class Solution {
    /**
     * 判斷數字是否爲3的冪
     * @param n
     * @return
     */
    public boolean isPowerOfThree(int n) {
        if (n <= 0) {
            return false;
        }
        while (n != 0) {
            if (n == 1) {
                return true; 
            } else if (n % 3 != 0) {
                return false;
            } else {
                n /= 3;
            }
        }
        return true;
    }
}

五、解題方法2

有一種方法僅適用於判斷數字是否爲質數的冪。設有兩個數字a和b,若是a是b的冪,那麼只須要找到另一個數x,知足x小於或等於Integer.MAX_VALUE,但x*b大於Integer.MAX_VALUE,若是a是b的冪,x%a必定是等於0的。Java語言中Integer的最大值是2147483647,大於3的19次冪爲1162261467,小於3的20次冪3486784401。所以咱們取1162261467做爲這個數x

Java代碼以下:

/**
 * @功能說明:LeetCode 326 - Power of Three
 * @開發人員:Tsybius2014
 * @開發時間:2016年1月11日
 */
public class Solution {
    /**
     * 判斷數字是否爲3的冪
     * @param n
     * @return
     */
    public boolean isPowerOfThree(int n) {
        if (n <= 0) {
            return false;
        } else {
            return n > 0 && 1162261467 % n == 0; //1162261467=3^19
        }
    }
}

六、解題方法3

下面的方法是我在討論區裏看到的一種比較有意思的方法。該方法先將數字轉換爲三進制的字符串,再用正則10*(意爲1後面跟0個或n個0)匹配算出結果。

Java代碼以下:

/**
 * @功能說明:LeetCode 326 - Power of Three
 * @開發人員:Tsybius2014
 * @開發時間:2016年1月11日
 */
public class Solution {
    /**
     * 判斷數字是否爲3的冪
     * @param n
     * @return
     */
    public boolean isPowerOfThree(int n) {
        if (n <= 0) {
            return false;
        } else {
            return Integer.toString(n, 3).matches("10*");
        }
    }
}

END

相關文章
相關標籤/搜索