原题:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-two
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:
思路:由于2的幂的二进制中只有一个1,所以我们可以将二进制中所有的数加在一起,如果等于1,则说明是2的幂,反之不是。
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
a = 0
if n <=0:
return False
while n != 0:
num = 1 if n & 1 ==1 else 0
a += num
n = n>>1
return True if a == 1 else False
解法二:
如果n 为2的幂,则一定满足以下条件:
- 恒有 n & (n - 1) == 0,这是因为:n二进制最高位为 1,其余所有位为 0;n - 1二进制最高位为 0,其余所有位为 1;一定满足 n > 0。
- 因此,通过 n > 0 且 n & (n - 1) == 0 即可判定是否满足 n = 2 ^n
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n > 0 and n & (n - 1) == 0