给定一个整数,编写一个函数来判断它是不是 2 的幂次方。java
输入: 1
输出: true
解释: 20 = 1复制代码
输入: 16
输出: true
解释: 24 = 16复制代码
输入: 218
输出: false
复制代码
【1】 1bash
【2】10函数
【4】100ui
【8】1000spa
...code
能够找一下2的幂的共同点,有且只有一个1,因此能够经过 (n != 0 && (n&(n-1) == 0))来判断。cdn
在java中 Integer.MIN_VALUE - 1 = Integer.MAX_VALUE(和补码有关)。而Integer.MAX_VALUE & Integer.MIN_VALUE 等于0 ,因此当n为Integer.MIN_VALUE的时候,该式子不成立,须要进行一个参数判断
blog
当n == Integer.MIN_VALUE就直接返回false,ssl
其实更好的处理方法就是当 n<=0的时候直接返回false,由于2的幂函数图像只在第1、二象限,随着x的减小只会无限趋近于0,不会等于0,因此当 n<=0时能够直接返回false。
it
class Solution {
public boolean isPowerOfTwo(int n) {
return n <= 0 ? false : (n & (n - 1)) == 0;
}
}
复制代码
复制代码