给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
(注意:这里规定不能使用循环判断,强行使用会因为运行超时而无法通过测试)
示例一:
示例二:
示例三:
示例四:
示例五:
思路分析:
若
n
=
2
x
n=2^{x}
n=2x且
x
x
x为自然数,则一定满足以下条件:
1.恒有
n
n
n &
(
n
−
1
)
=
=
0
(n-1)==0
(n−1)==0,这是因为:
n
n
n的二进制最高位为1,其余所有位均为0;
n
−
1
n-1
n−1二进制最高位为0,其余所有位均为1;
2.一定满足
n
>
0
n>0
n>0
因此,通过
n
>
0
n>0
n>0且
n
n
n &
(
n
−
1
)
=
=
0
(n-1)==0
(n−1)==0 即可判断是否满足
n
=
2
x
n=2^{x}
n=2x
具体如下图所示:
代码展示:
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}