题目描述:看看某个数是不是4的开方,也就是说相当于判断1的个数是在奇数还是偶数位?
题目链接:Leetcode 342. Power of Four
- 这道题让我们判断一个数是否为4的次方数,那么最直接的方法就是不停的除以4,看最终结果是否为1。
- 我们在确定其是2的次方数了之后,发现只要是4的次方数,减1之后可以被3整除.
- 最高位都是奇数位。
- 4的次方数的最高位的1都是奇数位,那么我们只需与上一个数(0x55555555) <==> 1010101010101010101010101010101,如果得到的数还是其本身,则可以肯定其为4的次方数.
代码如下
class Solution:
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
return False if num<=0 else (not (num & (num - 1))) and (num - 1) % 3 == 0
参考链接
- [LeetCode] Power of Four 判断4的次方数
- power of two
- power of three
- count 1 bits