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: |