3的幂
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
示例 1:
输入:n = 27
输出:true
示例 2:
输入:n = 0
输出:false
示例 3:
输入:n = 9
输出:true
示例 4:
输入:n = 45
输出:false
方法1:一直除以3
判断n是否能够被3整除,如果能够被3整除就除以3,直到不能被3整除为止,最后判断n是否等于1。
public boolean isPowerOfThree(int n) {
if (n > 1)
while (n % 3 == 0)
n /= 3;
return n == 1;
}
class Solution {
public boolean isPowerOfThree(int n) {
if(n==0){
return false;
}
if(n==1){
return true;
}
// 如果不是三的倍数,肯定就不是3的幂了
if(n%3 != 0){
return false;
}
// 如果整除3后的值不是三的倍数,就不是3的幂了
// 如果n = 3了,那么肯定是三的幂了
while (n!=3){
if(n%3 != 0){
return false;
}
n = n/3;
}
return true;
}
}
方法2:递归
public boolean isPowerOfThree(int n) {
return n > 0 && (n == 1 || (n % 3 == 0 && isPowerOfThree(n / 3)));
}
方法3:
题中n的范围是-2^ 31 <= n <= 2^31 - 1,而在这个范围内3的最大幂是1162261467,在比他大就超过int表示的范围了,我们直接用它对n求余即可,过求余的结果是0,说明n是3的幂次方.
public boolean isPowerOfThree(int n) {
return (n > 0 && 1162261467 % n == 0);
}