1、题目名称
Power of Three(数字三的幂)
2、题目地址
https://leetcode.com/problems/power-of-three/
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