Fork me on GitHub

判断int是否为3的幂—— Leetcode(326)

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?

一般的通用解法:

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
bool isPowerOfThree(int n) {
while (n >= 3 ){
if(n % 3 != 0)
return false;
n /= 3;
}
return n>0 && n != 2;
}
};

上述可以通过,但是题目说最好尝试一下非循环或者递归的解法。

我感觉此类方法就是有点取巧了。如,找出int范围内最大的3的倍数,所以任何3的倍数n都可以被其整除。

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
bool isPowerOfThree(int n) {
//方法2
const int maxint = 0x7fffffff;
//假设3^k 是int范围内最大的3的幂
int k = int(log(maxint) / log(3));
int max_power_3 = pow(3,k);
return n>0 && max_power_3 % n ==0;
}
};

或者将上述代码压缩到一行:

1
return n>0 && int(pow(3,int(log(0x7fffffff) / log(3)))) % n == 0;

pow函数在头文件math.h中。

同类题:

  1. 231. Power of Two
  2. 326. Power of Three
  3. 342. Power of Four
------ 本文结束感谢您的阅读 ------
坚持原创技术分享,您的支持将鼓励我继续创作!