题目

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 == 3x.

Example 1:

  1. Input: n = 27
  2. Output: true

Example 2:

  1. Input: n = 0
  2. Output: false

Example 3:

  1. Input: n = 9
  2. Output: true

Example 4:

  1. Input: n = 45
  2. Output: false

Constraints:

  • -2^31 <= n <= 2^31 - 1

Follow up: Could you solve it without loops/recursion?


题意

判断一个整数是不是3的幂。

思路

比较直接的就迭代去除即可。

O(1)方法:在Integer范围内,3的最大幂是3^19=1162261467,且其因数只有3的幂次,那么只要n是1162261467的因数,则n一定是3的幂次。


代码实现

Java

迭代

  1. class Solution {
  2. public boolean isPowerOfThree(int n) {
  3. if (n <= 0) return false;
  4. while (n > 1) {
  5. if (n % 3 != 0) return false;
  6. n /= 3;
  7. }
  8. return true;
  9. }
  10. }

数学计算

  1. class Solution {
  2. public boolean isPowerOfThree(int n) {
  3. return n > 0 && 1162261467 % n == 0;
  4. }
  5. }