https://leetcode.cn/problems/power-of-two/description/


可以使用位运算来判断一个数是否是 2 的幂次方。具体来说,一个数 n 是 2 的幂当且仅当:
- n 为正整数。
- n 的二进制表示中只有一个
1。
利用位运算 n & (n - 1) 的特点:
- 如果 n 是 2 的幂,则其二进制表示只有一个
1,如100,1000。 - n - 1 会将最低位的
1变为0,并将其后所有的0变为1,如:8 (1000)->7 (0111)4 (0100)->3 (0011)
- 于是
n & (n - 1) == 0仅当 n 是 2 的幂。
代码:
def isPowerOfTwo(n: int) -> bool:
return n > 0 and (n & (n - 1)) == 0
# 测试
print(isPowerOfTwo(1)) # True
print(isPowerOfTwo(2)) # True
print(isPowerOfTwo(16)) # True
print(isPowerOfTwo(3)) # False
print(isPowerOfTwo(0)) # False
print(isPowerOfTwo(-8)) # False
时间复杂度:
O(1)(常数时间)
这样就能高效判断一个数是否是 22 的幂次方。🚀
466

被折叠的 条评论
为什么被折叠?



