2的幂
题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
解题思路
个人AC
class Solution {
public boolean isPowerOfTwo(int n) {
if (n <= 0) return false;
int cnt = 0;
while (n != 0) {
n &= (n - 1);
cnt++;
if (cnt > 1) return false;
}
return cnt == 1;
}
}
时间复杂度: O ( 1 ) O(1) O(1),k为给定n的二进制表示中1的位数;
空间复杂度: O ( 1 ) O(1) O(1)。
最优解
class Solution {
public boolean isPowerOfTwo(int n) {
// 若n为正整数,且二进制表示中只有1位是1,则n & (n - 1)结果必为0
return n > 0 && n & (n - 1) == 0;
}
}
时间复杂度: O ( 1 ) O(1) O(1);
空间复杂度: O ( 0 ) O(0) O(0)。

本文介绍了一种高效判断一个整数是否为2的幂次方的方法,通过位操作实现,时间复杂度和空间复杂度均为O(1)。文章提供了两种解法,一种是循环检查,另一种是直接通过位运算判断。
321

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



