题目:
给定一个整数,编写一个函数来判断它是否是 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; } }
本文介绍了一种高效判断一个整数是否为2的幂次方的方法。通过观察2的幂次方的二进制表示,发现一个整数与其减一后的数进行与运算若结果为0,则该数为2的幂次方,但需排除0这一特殊情况。此方法的时间和空间复杂度均为O(1)。
687

被折叠的 条评论
为什么被折叠?



