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

递归的写法.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public class Solution {
public boolean isPowerOfThree(int n) {
if (n < 1) {
return false;
}

while (n % 3 == 0) {
n /= 3;
}

return n == 1;
}
}
}

iterative solution.
时间复杂度: O(log以3为底n的对数)
空间复杂度: O(1)

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

3的power在32bit integer中最大的是1162261467, 那么如果n是3的power, 那n一定是1162261467的一个因数. 反过来, 如果是因数也一定说明n是3的power,因为3是个prime number. 因此该方法对于prime number是适用的. 如果不是prime number, 比如是个4, 那么32bit下的integer最大的4的power是一个数字, 能被它整除的数字不一定是4的power, 比如2.

时间复杂度: O(1)
空间复杂度: O(1)