描述:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
思路:
【1】 1
【2】10
【4】100
【8】1000
...
可以找一下2的幂的共同点,有且只有一个1,所以可以通过 (n != 0 && (n&(n-1) == 0))来判断。
在java中 Integer.MIN_VALUE - 1 = Integer.MAX_VALUE(和补码有关)。而Integer.MAX_VALUE & Integer.MIN_VALUE 等于0 ,所以当n为Integer.MIN_VALUE的时候,该式子不成立,需要进行一个参数判断
扫描二维码关注公众号,回复:
5126010 查看本文章
当n == Integer.MIN_VALUE就直接返回false,
其实更好的处理方法就是当 n<=0的时候直接返回false,因为2的幂函数图像只在第一、二象限,随着x的减少只会无限趋近于0,不会等于0,所以当 n<=0时可以直接返回false。
代码:
class Solution {
public boolean isPowerOfTwo(int n) {
return n <= 0 ? false : (n & (n - 1)) == 0;
}
}