给定一个整数,编写一个函数检查其是否是 2 的幂。
例一:
输入: 1
输出: true
解释: 20 = 1
例二:
输入: 16
输出: true
解释: 24 = 16
例三:
输入: 218
输出: false
这个题和第 191 题的原理相同,只需要进行位运算就可以判断了。原因是,2 的幂的二进制形式最高位为 1
,其余位均为 0
,而 n & (n - 1)
这个操作直观来看刚好可以消去这个数字二进制形式中最右的 1
,若此数是 2 的幂,一步计算之后唯一的 1
便也没有了,结果为 0
。我们便可以利用这个性质来判断此数是否是 2 的幂。
/*
* 231. Power of Two
* https://leetcode.com/problems/power-of-two/
* https://www.whosneo.com/231-power-of-two/
*/
public class IsPowerOfTwo {
public static void main(String[] args) {
IsPowerOfTwo solution = new IsPowerOfTwo();
System.out.println(solution.isPowerOfTwo(36));
System.out.println(solution.isPowerOfTwo(64));
System.out.println(solution.isPowerOfTwo(127));
}
private boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}