给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
- 示例
输入:n = 1
输出:true
解释:2^0 = 1
思路
这道题是简单题,使用循环或递归很容易写出来。那么能不能不使用这两种方法吗,答案是肯定的。我们使用位运算来求解。
如果一个数是2的幂次方,那么将它转换成二进制数之后,只有一位 为1 ,其他全为 0。基于这个,我们将一个数的最低位 1 变为0,如果这个数变为0的话,说明它是2的幂次方,不为0则不是。
下面介绍一种常见的 表示二进制最低位1 的的方法:
n & (n - 1)
- 证明如下
- 代码
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
拓展
如果你理解了这道题,可以尝试做一下 位1的个数 这道题,加深理解。