T231 2 的幂

桌桌 2022-8-12 58 8/12

题目描述如下:

T231 2 的幂

简单题欸,咱只需要循环判断一下就可以了欸

代码如下:

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

可是结果很差欸:

T231 2 的幂

应该是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

结果如下:

T231 2 的幂

快事快了一奈奈,但是效果还是太差了,肯定是有什么简易的方法判断是不是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

结果如下:

T231 2 的幂

又想了想,也参考了下带佬的代码,好像思路都是这样,要再快的话可能就是面向测试用例编程了??将那32个数放集合里,判断是否在哈希表里,若是返回True这样?也许会快一点点也说不定,毕竟都是O(1)。

- THE END -

桌桌

8月16日01:09

最后修改:2022年8月16日
0

非特殊说明,本博所有文章均为博主原创。