题目链接:https://leetcode-cn.com/problems/power-of-two/
难度:简单
描述:
给你一个整数 n
,请你判断该整数是否是 2
的幂次方。如果是,返回 true
;否则,返回 false
。
题解
命题:的充要条件是
n & (n - 1) = 0
。
证明:
:
- 当
k = 0
,即n = 1
时上述等式成立。 - 当
k > 0
时,把n
看成是二进制数,那么n = 10...0
,n
的从右起第k
位是0
,第k+1
位是1
。则n - 1 = 11...1
所有k
位数字都是1
,那么n & (n - 1) = 0
时显然的。
- 当
:
- 当
时,
是显然的,即
n
和n - 1
的第k+1
位都是1
,n & (n - 1) = 0
不成立。 - 当
时,
n & (n - 1) = 0
是显然的。 - 当
时,
n & (n - 1) = 0
成立。
- 当
综上所述,命题成立。
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n > 0 and n & (n - 1) == 0