231. 2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例:
输入: 1 -> 输出: true
输入: 218 -> 输出: false
解法1
常规递归的思路, 逐步除2后得出是否是2的幂次.
还可以进行一次奇偶数的判断, 这样减少循环次数.
class Solution:
def isPowerOfTwo(self, n):
if n == 1:
return True
while n > 1:
n = n/2
return n==1
解法2
运用与运算, 当 n 是 2 的幂次时, n 与 n-1 的二进制位互补, 因此与预算的结果必然为0.
class Solution:
def isPowerOfTwo(self, n):
if n == 0:
return False
return n&(n-1) == 0
解法3
直接算出每个2的幂次数然后比较.
当 n 不是 2 的幂次时, 必然循环32次.
class Solution:
def isPowerOfTwo(self, n):
for i in range(31):
if 2**i == n:
return True
return False
解法4
采用递归的方式.
class Solution:
def isPowerOfTwo(self, n):
if n == 1: return True
if n%2 == 0 and n >= 2:
return self.isPowerOfTwo(n/2)
else:
return False