一、題目名稱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