LeetCode 第 326 题 (Power of Three)
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
这道题的常规的思路是不停的除以 3,如果能除尽就说明是 power of three。下面是代码:
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0) return false;
do
{
if( !(n & 1) ) return false;
if( n == 1 ) return true;
if(n % 3) return false;
n = n / 3;
}while(n > 0);
return false;
}
};
其实所有这种类型的题还有一个统一的简便的做法。利用的是计算机中整数所能表示的数字是有限的这个特点。 自然数中
3N
有无穷多个。但是可以用 int 类型表示的却不多。这其中最大的那个是 1162261467。其余的
3N
型的数
x
都是这个数的约数。也就是说 1162261467 可以被
按照这个思路,有下面的代码:
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0) return false;
return 1162261467 % n == 0;
}
};