互联网行业的小白,写博客的目的是为了记录自己的学习过程、对自己学习中所犯的错误做一个总结。由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!
问题描述
题目传送门:2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
实例:
输入: 1
输出: true
解释: 2^0 = 1
示例 2:
输入: 16
输出: true
解释: 2^4 = 16
示例 3:
输入: 218
输出: false
题解
暴力实现 |
控制变量从0开始,循环遍历2的幂,如果相等返回True
当遍历得到数已经大于给定的n时,说明这个数不是2的幂次方,返回False
AC代码:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
k = 0
while True:
temp = pow(2, k)
if temp == n:
return True
k += 1
if temp > n:
return False
二进制 |
观察一些2的幂的二进制数
可以发现这些数中只有一个1出现,因此只需统计二进制中是否只出现一个1即可。
注意:如果遇到输入的数为负数,直接return False
AC代码:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n < 0:
return False
lst = bin(n)
if lst.count('1') == 1:
return True
return False
位运算 |
从二进制的分析中,可以看到这些数最高位都为1
,其余位为0
,因此将
n
n
n与
n
−
1
n-1
n−1作&
运算,看结果是否为0
AC代码
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n > 0 and (n & (n - 1)) == 0:
return True
return False
码字不易,您的
支持
就是我坚持
下去的动力,一起加油哦。