Question
Formatted question description: https://leetcode.ca/all/231.html
231 Power of Two
Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1
Output: true
Explanation: 2^0 = 1
Example 2:
Input: 16
Output: true
Explanation: 2^4 = 16
Example 3:
Input: 218
Output: false
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
Java
-
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; } } }
-
// 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(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ return n != 0 and (n & -n) == n