给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27 输出: true
示例 2:
输入: 0 输出: false
示例 3:
输入: 9 输出: true
示例 4:
输入: 45 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
思路一:直接用暴力破解的方法,循环 Math.pow(3,i),判断结果是否和 n 相等
class Solution {
public boolean isPowerOfThree(int n) {
if(n == 0 ) return false;
else if(n==1) return true;
for(int i = 0;i <= 100;i++ ){
if(Math.pow(3,i) == n){
return true;
}
}
return false;
}
}
思路二:网上看别人的,使用对数的知识,如果 n 是 3 的幂的话,那么以 3 为底的对数 N 为整数,那么转型 int 后与自身相减为 0 。
public static boolean isPowerOfThree(int n) {
double temp = Math.log10(n) / Math.log10(3); //使用换底公式解决
return (temp - (int)(temp)) == 0?true:false;
}
思路三:
class Solution {
public boolean isPowerOfThree(int n) {
return ( n>0 && 1162261467%n==0); // 1162261467 为 int 类型中的 3 的幂的最大数
}
}