power of three

Problem

Given an integer, write a function to determine if it is a power of three.

分析

递归可以很简单的解决

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

如果不利用递归或者循环,怎么解?
可以事先找出在整型范围内,3的幂的最大数,也就是(1162261467)。那么对于任意一个是3的幂的数字来说,都能被这个数整除。所以有:

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