一、题意
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
二、分析和解答
我开始真的没搞懂这个题意!判断这个数是不是3的幂!(就是3的一次幂,二次幂。。n次幂,而不是x的3次幂)。
题意说不要用任何的循环和递归!那么就先来个循环:
public boolean isPowerOfThree(int n) {
if(n == 0)//NOTE
return false;
while(n != 1){
int y = n % 3;
if(y != 0)
return false;
n = n / 3;
}
return true;
}
再来个递归:
public boolean isPowerOfThree(int n) {
if(n == 1 )
return true;
if(n % 3 != 0 || n == 0)
return false;
return isPowerOfThree(n/3);
}
要注意3的多少次幂都不是0!
2、然后,我想不起来,我尽量去考虑了异或等位运算,当然我也想log函数,但是不知道java中的log函数。
public boolean isPowerOfThree(int n) {
if(n == 0)
return false;
double d = Math.log10(n) / Math.log10(3);
if(d % 1 == 0)
//if(d - (int)d == 0)
return true;
else
return false;
}
但是要注意,不要使用以e为底的函数,会出现精度问题!Math.mog10();
3、当然也有人使用这个:
return ( n>0 && 1162261467%n==0);
3的19次幂,3的20次幂超过了最大数!