题目描述
给定一个整数,请判断它是否是3的次幂。
进一步: 能否不使用递归和循环?
样例1
输入:27
输出:true
样例2
输入:0
输出:false
样例3
输入:9
输出:true
样例4
输入:45
输出:false
算法
(数论) $O(1)$
判断 $n$ 是否是3的次幂,即判断 $n$ 的质因子是否只有3。
整型范围内3的最大次幂是 $3^{19} = 1162261467$。则 $n$ 的质因子只有3,就等价于 $n$ 能整除 $1162261467$。
时间复杂度分析:只有一次取模运算,时间复杂度是 $O(1)$。
C++ 代码
class Solution {
public:
bool isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
};
两个typo:
(1)
Example 3:
Input: 9
Output: true
(2) 原题链接
https://leetcode.com/problems/power-of-three/
笔误,已改~
笔误,已改~
这个解法令人发指,我还在写while loop
这题和leetcode 231很像,参考了discuss里面的做法。
但是我后来发现,这个整除的解法和while loop 的解法运行时间差不多
多谢,那我去把231再写一下
可能是因为取模运算很慢。
厉害厉害,没想到还可以这么解,利用了整数的范围和3的幂次的性质
O(∩_∩)O哈哈