2 的幂

题目描述(来源于LeetCode)

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方

代码实现

初期思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
i =31
pid =0
while i:
if n ==1:
pid =1
break
n/=2
i-=1
if pid:
return True
else:
return False

复杂度分析

  • 时间复杂度:O(log2(n))O(log_2(n))
  • 空间复杂度:O(1)O(1)

进阶

使用位运算:2的幂在二进制表示中只有一个1,其余位都是0。因此,n & (n - 1) 操作会将唯一的1变为0,如果结果为0,则 n 是2的幂

1
2
3
4
5
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n ==0 :
return False
return n&(n-1)==0

复杂度分析

  • 时间复杂度:O(1)O(1)
  • 空间复杂度:O(1)O(1)