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; } };