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的幂
算法分析
方法一:暴力破解
给定数n分别取余与取整。
Java代码
public class Solution {
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;
}
}
方法二:
若a是b的幂,那存在一个数x满足x小于x小于Integer.MAX_VALUE,但x*b大于Integer.MAX_VALUE,而x % b = 0。Java中Interger.MAX_VALUE = 2147483647,大于3的19次幂为1162261467,小于3的20次幂3486784401,因此取1162261467,这个数
注意:此方法只能判断质数幂,判断其它类别的数,请看参考3
Java代码
public class Solution {
public boolean isPowerOfThree(int n) {
if (n <= 0) return false;
return n > 0 && 1162261467 % n == 0;
}
}