1、题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 1:
输入:n = 1
输出:true
解释:20 = 1
2、解答
- 位运算法:如果n是2 的幂次方的整数,那么肯定有n&(n-1)=0,因为n相对于(n-1)来说进了一位。其实还能观察到n对应的二进制其实只有一个1.
- 二分法:这个就是二分查找法。
class Solution(object):
def isPowerOfTwo(self, n):
"""
位运算法:如果n是2的幂,则n&(n-1)=0
因为n相对于n-1来说进了一位
:type n: int
:rtype: bool
"""
if n<=0:
return False
return n&(n-1)==0
def isPowerOfTwo1(self, n):
"""
位运算法:2的幂对应的二进制只有一个1
因为n相对于n-1来说进了一位
:type n: int
:rtype: bool
"""
return n>0 and bin(n).count('1') == 1
def isPowerOfTwo2(self, n):
"""
二分法
:param n:
:return:
"""
if n<=0:
return False
start = 0
end = n
while start<=end:
mid = (end - start) // 2 + start
res = pow(2, mid)
if res==n:
return True
elif res>n:
end = mid-1
else:
start = mid+1
return False
337

被折叠的 条评论
为什么被折叠?



