位运算
由题意可得,若$n=2^x$,则说明n的二进制表示只有一位是1。
- 使用lowbit,可以求得n的最右边的二进制1。
- n和lowbit(n)做差,若得0,则说明n二进制表示只有一位是1,否则二进制不止1个1。
时间复杂度$O(1)$,空间复杂度$O(1)$
AC代码
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0) return false;
int t = (n & (-n));
t = n - t;
return t == 0;
}
};