题目: 给定一个整数,写一个函数来判断它是否是 3 的幂次方
循环写法:
public boolean isPowerOf3(int n) {
if (n == 1) return true;
while (n > 3 && n % 3 == 0) {
n = n / 3;
}
return n == 3;
}
递归写法:
public boolean isPowerOf3_2(int n) {
if (n == 1) return true;
if (n >= 3 && n % 3 == 0) return isPowerOf3_2(n / 3);
return false;
}
非人类写法:
因为int范围内最大3的幂次方是3^19次方1162261467 只要判断能能否被这个数整除即可:
public boolean isPowerOf3_3(int n) {
return n > 0 && 1162261467 % n == 0;
}
最暴力写法:枚举
public boolean isPowerOfThree_4(int n) {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
if (Math.pow(3, i) > n) break;
if (Math.pow(3, i) == n) return true;
}
return false;
}