题目
难度:★☆☆☆☆
类型:数学
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
进阶:
你能不使用循环或者递归来完成本题吗?
示例
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
解答
这道题跟【题目231. 2的幂】属于同一个类型,递归和迭代写法可以直接参考该题目,这里为大家介绍一种时间和空间复杂度均为O(1)的解法。
我们知道,输入是32位有符号整数,范围是[-231~231-1],即[-2147483648~2147483647],在这个范围内3的幂是有限的,而且最大的是3^19=1162261467,这个最大的3的幂除以其他任何一个3的幂,余数一定是0,而除以任何一个不是3的幂的数,则余数一定不为零,根据这个原理,我们就可以解决3的幂的判别问题。
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
return n > 0 and 3 ** 19 % n == 0
如有疑问或建议,欢迎评论区留言~