力扣 231. 2 的幂

题目说明

  • 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

    如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。

  • 提示:

    • -2^31 <= n <= 2^31 - 1

示例

示例 1:

1
2
3
输入:n = 1
输出:true
解释:2^0 = 1

示例 2:

1
2
3
输入:n = 16
输出:true
解释:2^4 = 16

示例 3:

1
2
输入:n = 3
输出:false

示例 4:

1
2
输入:n = 4
输出:true

示例 5:

1
2
输入:n = 5
输出:false

笔者理解

此题是一道位运算算法问题,在力扣题库中被定义为简单题。

解法

当笔者阅读完此题后,发现此题比较简单,考察的是简单的位运算知识,让我们来看看具体如何实现的吧。

实现

1
2
3
4
5
6
7
8
9
public boolean isPowerOfTwo(int n) {
// 0和负数不是
if (n < 1) {
return false;
}

// 通过n & (n - 1)消去二进制靠近右边的一位1,如果是2的幂,自然就会消除变成0
return (n & (n - 1)) == 0;
}

时间效率和空间效率都还行,可见此解法还比较适合此题;

image.png

总结

本题是今天的每日一题,难度是为简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。