题目
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 2^0 = 1
示例 2:
输入: 16
输出: true
解释: 2^4 = 16
示例 3:
输入: 218
输出: false
我的AC
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n <= 0:
return False
while n:
if n == 2 or n == 1:
return True
if n % 2 == 1:
return False
n = n / 2
版本二
按位与
- 一旦是 2 的倍数,必为 10,100,1000,10000,100000, ... 形式
- 所有
n & n-1 == 0
恒成立 - n-1 形如 01, 011, 0111, 0111, ...
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n <= 0:
return False
return not n & (n-1)
小结
码代码前,先在纸上写一写,想清楚逻辑,这样更快更准确
按位与
n & (n-1)