leetcode 231 2的幂

描述:

给定一个整数,编写一个函数来判断它是否是 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;
  }
}

结果:

 

猜你喜欢

转载自blog.csdn.net/Kirito19970409/article/details/86689839