The task is simple: determine whether a given integer n
is a power of two. In other words, return true
if there exists some integer x
such that:
n == 2^x
Otherwise, return false
.
Intuition
A power of two always has exactly one bit set in its binary representation. For example:
-
1
=2^0
→0b0001
-
2
=2^1
→0b0010
-
4
=2^2
→0b0100
-
8
=2^3
→0b1000
All of these have exactly one bit set to 1
. Any number that is not a power of two will either have multiple bits set or will be less than or equal to 0.
This leads to an efficient bitwise approach to check whether n
is a power of two without using loops or recursion.
Approach
We use the __builtin_popcount(n)
function available in GCC/Clang-based compilers. This function returns the number of set bits (bits equal to 1) in the binary representation of n
.
- A power of two has exactly one set bit, so we check if
__builtin_popcount(n) == 1
. - We also ensure
n > 0
, since negative numbers and zero cannot be powers of two.
C++ Code
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && __builtin_popcount(n) == 1;
}
};
JavaScript Version
JavaScript does not have a built-in popcount
function, but we can convert the number to binary and count the number of 1s:
var isPowerOfTwo = function(n) {
return n > 0 && n.toString(2).split('1').length - 1 === 1;
};
Alternatively, use a bitwise trick:
var isPowerOfTwo = function(n) {
return n > 0 && (n & (n - 1)) === 0;
};
Python Version
Python also lacks a direct popcount, but we can use the bin()
function:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n > 0 and bin(n).count('1') == 1
Or using the bitwise trick:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n > 0 and (n & (n - 1)) == 0
Time and Space Complexity
Time Complexity:
O(1)
All operations—whether counting bits or doing bitwise checks—are constant time.Space Complexity:
O(1)
No extra memory is used.
Final Thoughts
This is a straightforward bit manipulation problem. The use of __builtin_popcount
or (n & (n - 1)) == 0
makes the check both efficient and concise. Knowing how powers of two behave in binary is the key insight here.
Top comments (3)
Love the bitwise Approach Om !
Thanks Anna, Glad you liked it.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.