给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
class Solution {
public boolean isPowerOfTwo(int n) {
//return n>0 && (n & (n-1))==0;
return n>0 && (n&(-n))==n;
}
}
除了使用二进制表示判断之外,还有一种较为取巧的做法。
在题目给定的 32 位有符号整数的范围内,最大的2的幂为 2^{30} = 10737418242
我们只需要判断n是否是10737418242 的约数。
class Solution {
static final int BIG = 1 << 30;
public boolean isPowerOfTwo(int n) {
return n > 0 && BIG % n == 0;
}
}