1. 题目来源
链接:231. 2 的幂
2. 题目解析
容易发现,如果是负数,指数一定不是整数,则 n > 0
。
若为 2^x
,那么二进制表示中只能存在一个 1。
知识点:
n & n-1
清除末尾 1 。n & -n
即lowbit()
操作,返回二进制表示末尾 1。
注意运算符优先级,n & n - 1 == 0
与运算 &
优先级很低,会先计算 -
再直接计算 ==
。 &&
优先级最低。
时间复杂度: O ( 1 ) O(1) O(1)
空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:
bool isPowerOfTwo(int n) {
// return n > 0 && (n & (n - 1)) == 0;
return n > 0 && (n & -n) == n;
}
};