题目:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1 输出: true 解释: 20 = 1
示例 2:
输入: 16 输出: true 解释: 24 = 16
示例 3:
输入: 218 输出: false
解题思路:
尝试从2的幂的二进制码中找出规律:
2 | 10 |
4 | 100 |
8 | 1000 |
16 | 10000 |
可以发现,如果一个数是2的幂,它与它减去1进行与运算得到的结果应该为0。
当然这个规律有特殊情况,如果这个数为0也是成立的,但是0不是2的幂,所以我们需要排除这个情况。
算法的时间复杂度和空间复杂度都为O(1)。
代码实现:
class Solution { public boolean isPowerOfTwo(int n) { return (n > 0) && (n & (n - 1)) == 0; } }