1.题目
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
示例:
输入:n = 27输出:true输入:n = 0输出:false输入:n = 9输出:true输入:n = 45输出:false
提示:
- -2^31 <= n <= 2^31 -1
进阶:
- 你能不使用循环或者递归来完成本题吗?
2.思路
和之前2次幂类似,先来个最简单的:
public boolean isPowerOfThree(int n) {if (n==1) {return true;}long a=1;//防止溢出while(true){a=a*3;if (a==n) {return true;}if (a>n) {return false;}}}
当然也可以反向:
public boolean isPowerOfThree(int n) {if (n < 1) {return false;}while (n % 3 == 0) {n /= 3;}return n == 1;}
递归:
public boolean isPowerOfThree(int n) {return n > 0 && (n == 1 || (n % 3 == 0 && isPowerOfThree(n / 3)));}
接下来的是数学技巧~我是没想到:
public boolean isPowerOfThree(int n) {return (Math.log10(n) / Math.log10(3)) % 1 == 0;}
