Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example 1:
Input: 16
Output: true
Example 2:
Input: 5
Output: false
思路:和之前power of 3 很像,还是判断是否大于零,然后不断除以三。
class Solution:
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
if num<1:
return False
while num>1:
if num%4 != 0:
return False
num /= 4
return num==1
不过4和3不同,和2比较像,同样可以利用二进制数字进行计算。
第一个条件还是要大于0,第二个条件判断是2的某次方(power of 2),第三个条件是和0101 0101 0101...进行与运算,确定是4的某次方(只有在4,16位置为1)。如果没有第二个条件限制,5(0101)在第三个条件下也是True。
class Solution:
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
return num > 0 and (num & (num - 1)) == 0 and (num & 0x55555555) == num