目录
题目
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。
-2^31 <= n <= 2^31-1
思路
首先n > 0
n化成二进制后只有一个1,则n就是2的幂
使用位运算,将n的二进制中最低位的那个1提取出来,再判断剩余的数值是否为0即可
提取方法:n & (n-1)
原理:将n的二进制表示为 (a10⋯0),其中 a 表示若干个高位,1 表示最低位的那个 1,0⋯0 表示后面的若干个0,则 n−1 的二进制表示为(a01⋯1),n和n-1做个按位与即可。
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n-1)) == 0;
}
}