题目描述如下:
简单题欸,咱只需要循环判断一下就可以了欸
代码如下:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n <= 0:
return False
for i in range(0, 32):
if n == 2**i:
return True
return False
可是结果很差欸:
应该是2**i那里重复运算了,每一次计算,都需要从原来的2的1次方依次乘上去,所以我改了改:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n <= 0:
return False
tmp = 1
for i in range(0, 32):
if n == tmp:
return True
tmp = tmp*2
return False
结果如下:
快事快了一奈奈,但是效果还是太差了,肯定是有什么简易的方法判断是不是2的幂。想到可能按位运算更快一些,但是如何用呢,所有的2的幂,二进制肯定是1000000这样的类型的,因此,减1肯定变成0111111这种,这样按位与一下如果为0就是了。应该是O(1)的复杂度
代码如下:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n <= 0:
return False
else:
return (n & n-1) == 0
结果如下:
- THE END -
最后修改:2022年8月16日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://wangyuanzhuo.top/t231-2-%e7%9a%84%e5%b9%82/