2的幂
一、题目描述
给你一个整数
n
,请你判断该整数是否是2
的幂次方。如果是,返回true
;否则,返回false
。如果存在一个整数
x
使得n == 2x
,则认为n
是2
的幂次方。
二、示例
1、示例一
2. 示例二
3. 示例三
4.示例四
三、解题思路
- 若$n = 2 ^ x$且
x
为自然数(即n
为2
的幂),则一定满足以下条件:- 恒有
n & (n - 1) == 0
, 这是因为:n
二进制最高位为1
, 其余所有位为0
。n - 1
二进制最高位为0
,其余所有位为1
。
- 一定满足
n > 0
。
- 恒有
- 因此,通过
n > 0
且n & (n - 1) == 0
即可判定是否满足$n == 2^x$。
$2^x$ | n | n - 1 | n & (n - 1) |
---|---|---|---|
$2^0$ | 0001 | 0000 | (0001) & (0000) = 0 |
$2^1$ | 0010 | 0001 | (0010) & (0001) == 0 |
$2^2$ | 0100 | 0011 | (0100) & (0011) == 0 |
$2^3$ | 1000 | 0111 | (1000) & (0111) == 0 |
… | … | … | … |
四、代码
1 | class Solution: |