1、题目名称
Power of Three(数字三的幂)
2、题目地址
3、题目内容
英文:Given an integer, write a function to determine if it is a power of three.
中文:给定一个整数,写一个函数判断该数是否为数字3的幂
4、解题方法1
对于本题而言,暴力破解法的效率并不算低。
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; } while (n != 0) { if (n == 1) { return true; } else if (n % 3 != 0) { return false; } else { n /= 3; } } return true; }}
5、解题方法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 } }}
6、解题方法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