4 Ways to find Given Number is Power of Two or Not in Java and Python
Problem Description :
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
Lets jump on solution. we will see 4 solutions for this problem.
Solution 1 : Check Number is Power of Two or Not using Recursive Approach in Java
import java.util.Scanner;
public class PowerOfTwo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter Number");
int number = sc.nextInt();
boolean ans = checkPowerOfTwo(number);
System.out.println(ans);
}
private static boolean checkPowerOfTwo(int number) {
if (number == 1) {
return true;
}
if (number == 0 || number % 2 != 0) {
return false;
}
return checkPowerOfTwo(number/2);
}
}
Solution 2 : Check Number is Power of Two or Not using Iterative Approach
private static boolean checkPowerOfTwo(int number) {
if (number == 0) {
return false;
}
while (number != 1) {
if (number % 2 != 0) {
return false;
}
number = number / 2;
}
return true;
}
Solution 3 : Check Number is Power of Two or Not using One Line Approach
private static boolean checkPowerOfTwo(int number) {
if (number <= 0) {
return false;
}
return ((number & (number -1)) == 0);
}
Explanation :
If number equals or less than 0 then it cant be any power of 2. Now for
positive numbers, it should have only one binary bit as 1.
for example,
1 -> 2^0 -> 0000001
2 -> 2^1 -> 0000010
4 -> 2^2 -> 0000100
8 -> 2^3 -> 0001000
16-> 2^4 -> 0010000
.......
.......
So here we can take a bitwise and (&) operation between the number and a number less than it, if it equal to 0 then it means that no other position has high bit, except at one place. Thus return true, else false.
Lets take number 32
32 = 1 0 0 0 0 0
32 - 1 = 31 = 0 1 1 1 1 1
number & number - 1 = 0 0 0 0 0 0
&(AND) Operator returns bit by bit AND of input values example, if both bits are 1, it gives 1, else it shows 0.
Solution 4 : Check Number is Power of Two or Not in Java
private static boolean checkPowerOfTwo(int number) {
int num = 1;
while (num < n){
num *= 2;
}
return num == n;
}
Example 5 : Check Number is Power of Two or Not using BitWise Approach
private static boolean checkPowerOfTwo(int number) {
int count=0;
while (number > 0) {
if ((number & 1) == 1) {
count++;
}
number = number >> 1;
}
return count == 1 ? true : false;
}
Explanation :
lets take number = 8
Bit representation of 8 = 1 0 0 0
number >> 1 = 0 1 0 0
number >> 1 = 0 0 1 0
number >> 1 = 0 0 0 1
(1 & 1) == 1 becomes true in if condition.
Solution 6 : Check Number is Power of Two or Not using One Line in Python
class Solution(object):
def isPowerOfTwo(self, n):
return n > 0 and not (n & n-1)
RECOMMENDED ARTICLES :
- Print Length of Longest Substring Without Repeating Characters from given String using Sliding Window Algorithm
- Valid Mountain Array Problem Solution in Java with Explanation
Comments
Post a Comment