问题描述:
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16 输出: true
示例 2:
输入: 5 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
方法1:同3的幂循环遍历
1 class Solution: 2 def isPowerOfFour(self, num): 3 """ 4 :type num: int 5 :rtype: bool 6 """ 7 if num > 0 : 8 if num == 1: 9 return True 10 else: 11 k = 0 12 while k == 0: 13 num = num / 4.0 14 k = num % 4 15 16 if num == 1: 17 return True 18 else: 19 return False 20 else: 21 return False
方法2:同3的次幂
1 import math 2 class Solution: 3 def isPowerOfFour(self, num): 4 """ 5 :type num: int 6 :rtype: bool 7 """ 8 return num > 0 and 4**round(math.log(num,4)) == num
方法3: 用4的倍数-1与num做与运算。15 = 1111 15 = 1111
16 = 10000 10 = 1010
00000 1010
1 class Solution: 2 def isPowerOfFour(self, num): 3 """ 4 :type num: int 5 :rtype: bool 6 """ 7 if num <= 0: 8 return False 9 else: 10 for i in range(0, 16): 11 if num <= 4**i: 12 tmp = num & (4**i -1) 13 if tmp == 0: 14 return True 15 else: 16 return False 17 else: 18 pass 19 return False
2018-09-25 21:28:04