题目:
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
题意:
给定一个整数,写一个函数判断它是否为4的幂
代码:
class Solution(object):
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
if num <= 0 :
return False
else :
if num == 1 :
return True
else :
if num&(num-1) == 0 : #满足条件的话,则num是2的幂,形式为1000000;否则num不是2的幂,也不是4的幂
count = 0 #继续判断num中0的个数,如果0的个数为偶数个,则Num也是4的幂,否则不是4的幂
while num != 1 :
count = count + 1
num = num/2
if count%2 == 0 :
return True
else :
return False
else :
return False
笔记:
思路:
先用num&(num-1) == 0 判断num是否为2的幂,如果是,则继续判断num是否为4的幂(因为4的幂肯定为2的幂,但2的幂不一定都是4的幂,例如8)。通过计算num的二进制表示中0的个数来判断,如果0的个数为偶数个,则Num为4的幂,否则,num不是4的幂(也可以说是看Num能否被2整除偶数次,如果可以,则Num是4的幂,否则,不是4的幂)
虽然用了循环,但是效率还可以吧。