leetcode 326. 3的幂
问题描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
代码(循环)
class Solution {
public:
bool isPowerOfThree(int n) {
if(n == 1)return true;
int i = n;
while(i > 3)
{
if(i % 3 != 0)return false;
i /= 3;
}
return (i == 3)?true:false;
}
};
结果:
执行用时 :36 ms, 在所有 C++ 提交中击败了19.01%的用户
内存消耗 :5.8 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
由于输入是int,正数范围是0-231,在此范围中允许的最大的3的次方数为\(3^{19}=1162261467\),那么我们只要看这个数能否被n整除即可:
class Solution {
public:
bool isPowerOfThree(int n) {
return ( n > 0 && 1162261467 % n == 0)?true:false;
}
};
结果:
执行用时 :16 ms, 在所有 C++ 提交中击败了89.06%的用户
内存消耗 :5.8 MB, 在所有 C++ 提交中击败了100.00%的用户