题目描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
解题思路
1.整数限制
LeetCode给的官方题解太太太太强了!!!!
先说一个整数限制。其思路是这样的,因为传的参数是一个整数,其最大值为2^31-1,在这个范围内3的·幂次方最大的是3的19次方,即1162261467,能被这个最大数整除的数一定是3的幂次方。
代码实现
class Solution {
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
}
执行用时 :
18 ms, 在所有 Java 提交中击败了97.16%的用户
内存消耗 :
40.1 MB, 在所有 Java 提交中击败了13.86%的用户
2.循环
用一个while循环,当n对3取模余数不为零时返回false,为零时将n除3继续循环,当n除到1时跳出循环,说明n是3的幂次方,返回true。
代码实现
class Solution {
public boolean isPowerOfThree(int n) {
if(n==0)return false;
while(n!=1){
if(n%3!=0)return false;
n=n/3;
}
return true;
}
}
执行用时 :
19 ms, 在所有 Java 提交中击败了95.77%的用户
内存消耗 :
40.1 MB, 在所有 Java 提交中击败了13.86%的用户
啧啧啧,没想到内存消耗和时间消耗还不错。