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?
一般的通用解法:1234567891011class 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
都可以被其整除。
|
|
或者将上述代码压缩到一行:1return n>0 && int(pow(3,int(log(0x7fffffff) / log(3)))) % n == 0;
pow
函数在头文件math.h
中。
同类题: