xqn2017

导航

326. Power of Three

原文题目:

326. Power of Three

读题:

题目很简单,就看是不是3的次方,如果是那当然能够被3整除,并且不断除以3之后,最后结果为1

但题目不推荐这种解法,题目希望能够不用递归或者循环,有几种解法如下:

循环实现:

class Solution 
{
public:
	bool isPowerOfThree(int n) 
	{
		if (n <1) return false;
		while(n%3 ==0)
		{
			n = n/3;
		}
		return n==1;
	}
};

列举实现:

由于是int型,最大正整数为2147483647,列出所有3的次方数

class Solution {  
public:  
	bool isPowerOfThree(int n) {  
		return (n == 1 || n == 3 || n == 9 || n == 27 || n == 81 || n == 243 || n == 729 
			|| n == 2187 || n == 6561 || n == 19683 || n == 59049 || n == 177147 || n == 531441 
			|| n == 1594323 || n == 4782969 || n == 14348907 || n == 43046721 || n == 129140163 
			|| n == 387420489 || n == 1162261467);  
	}  
}; 

找规律:

由于最大的3的次方数为1162261467,那么其他比这个数小的3的次方数必然能够被这个数整除,因此

class Solution {  
public:  
	bool isPowerOfThree(int n) {  
		return n>0?!(1162261467 % n):0; 
	}  
}; 

  

posted on 2018-02-02 15:04  xqn2017  阅读(192)  评论(0编辑  收藏  举报