# Question

Formatted question description: https://leetcode.ca/all/231.html

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:

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


Example 2:

Input: n = 16
Output: true
Explanation: 24 = 16


Example 3:

Input: n = 3
Output: false


Constraints:

• -231 <= n <= 231 - 1

Follow up: Could you solve it without loops/recursion?

# Algorithm

Observe the characteristics of the binary notation of the power of 2:

1   2   4       8       16 　　....

1   10  100     1000    10000　...


The power of 2 has only one 1, and the rest is 0s, so our problem-solving idea is to determine whether the lowest bit is 1 each time, then shift to the right, and finally count the number of 1s to determine whether it is Power of 2

# Code

• 
public class Power_of_Two {

class Solution {
public boolean isPowerOfTwo(int n) {
int cnt = 0;
while (n > 0) {
cnt += (n & 1);
n >>= 1;
}
return cnt == 1;

}
}
}

############

class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}

• // OJ: https://leetcode.com/problems/power-of-two/
// Time: O(1)
// Space: O(1)
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0) return false;
while ((n & 1) == 0) n >>= 1;
return n == 1;
}
};

• class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n > 0 and (n & (n - 1)) == 0

############

class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
return n != 0 and (n & -n) == n


• func isPowerOfTwo(n int) bool {
return n > 0 && (n&(n-1)) == 0
}

• function isPowerOfTwo(n: number): boolean {
return n > 0 && (n & (n - 1)) == 0;
}


• /**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function (n) {
return n > 0 && (n & (n - 1)) == 0;
};