Power of Two

231.Power of Two

Given an integer n, return true if it is a power of two. Otherwise, return false.

An integer n is a power of two, if there exists an integer x such that n == 2x.

Example 1:

1
2
3
Input: n = 1
Output: true
Explanation: 20 = 1

Example 2:

1
2
3
Input: n = 16
Output: true
Explanation: 24 = 16

Example 3:

1
2
Input: n = 3
Output: false

个人解答:

时间复杂度:O(logn)

空间复杂度:O(1)

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
bool isPowerOfTwo(int n) {
long num = 1;
while (num <= n) {
if (num == n)return true;
num *= 2;
}
return false;
}
};

位运算:

时间复杂度:O(1)

空间复杂度:O(1)

1
2
3
4
5
6
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
};
1
2
3
4
5
6
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && (n & -n) == n;
}
};

约数法:

时间复杂度:O(1)

空间复杂度:O(1)

1
2
3
4
5
6
7
8
class Solution {
private:
static constexpr int BIG = 1 << 30;
public:
bool isPowerOfTwo(int n) {
return n > 0 && BIG % n == 0;
}
};