【LeetCode】326. Power of Three 3的幂(Easy)(JAVA)
题目地址: https://leetcode-cn.com/problems/power-of-three/
题目描述:
Given an integer n, return true if it is a power of three. Otherwise, return false.
An integer n is a power of three, if there exists an integer x such that n == 3^x.
Example 1:
Input: n = 27
Output: true
Example 2:
Input: n = 0
Output: false
Example 3:
Input: n = 9
Output: true
Example 4:
Input: n = 45
Output: false
Constraints:
- -2^31 <= n <= 2^31 - 1
Follow up: Could you do it without using any loop / recursion?
题目大意
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
进阶:
- 你能不使用循环或者递归来完成本题吗?
解题方法
- 对 n 判断是否能整除 3, 如果能继续循环,直到不能整除 3 为止
- 最后如果结果等于 1, 就说明是 3 的幂次方
class Solution {
public boolean isPowerOfThree(int n) {
if (n <= 0) return false;
while (n % 3 == 0) {
n /= 3;
}
return n == 1;
}
}
执行耗时:15 ms,击败了99.06% 的Java用户
内存消耗:38.3 MB,击败了73.10% 的Java用户
不用循环
- int 范围内 3 的幂次方的最大值是 1162261467
- 所以所有 3 的幂次方: 1162261467 % n 的取余都是 0,其他数都不等于 0
class Solution {
public boolean isPowerOfThree(int n) {
return (n > 0 && (1162261467 % n == 0));
}
}
执行耗时:17 ms,击败了46.11% 的Java用户
内存消耗:38.3 MB,击败了69.07% 的Java用户