1.链接:
2.思路:
法一:
看二进制数1的个数,为1个即符合2的幂次方,<=0的直接false,没必要算。
法二:
不用for循环,需要找规律--从法一我们可以知道,符合2的幂的数n,
其二进制位只有一位为1,那我们可以想一下这样的数字和普通的数字
有什么区别。我当初能想到的就是利用& | ^这些运算,反正就是不断
尝试。结果发现n & n -1 行的通,因为符合的数套进该公式结果为零。
虽然0也符合该公式,但是可以例外处理。
class Solution {
//法一:
public boolean isPowerOfTwo1(int n) {
return n>=0 && Integer.bitCount(n) == 1;
}
//法二:
public boolean isPowerOfTwo(int n) {
if(n<=0) return false;
return (n & n - 1) == 0;
}
}