题目描述如下:
简单题欸,咱只需要循环判断一下就可以了欸
代码如下:
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
结果如下:
又想了想,也参考了下带佬的代码,好像思路都是这样,要再快的话可能就是面向测试用例编程了??将那32个数放集合里,判断是否在哈希表里,若是返回True这样?也许会快一点点也说不定,毕竟都是O(1)。