问题:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
方法一(自己的):
时间:14ms
思路:递归调用自己
代码
public boolean isPowerOfThree(int n) {
if(n==0) return false;
if(n==1) return true;
if(n%3==0){
n=n/3;
return isPowerOfThree(n);
}else{
return false;
}
}
方法二(leetccode):
时间:15 ms
思路:利用log函数,如果为3的幂,则log3(n)必为整数
代码
public boolean isPowerOfThree(int n) {
//return (n > 0 && 1162261467 % n == 0);
double tem = Math.log10(n) / Math.log10(3);
return (tem - (int)(tem)) == 0?true:false;
}
方法三(leetcode):
时间:14 ms
思路:用2^31次方内,最大的3的幂去除n取余…判断余数是否为0
代码
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467%n == 0;
}