Given an integer N, the task is to generate all the binary strings with equal 0s and 1s. If no strings are possible, print -1
Examples:
Input: N = 2
Output: “01”, “10”
Explanation: All possible binary strings of length 2 are: 01, 10, 11, 00. Out of these, only 2 have equal number of 0s and 1sInput: 4
Output: “0011”, “0101”, “0110”, “1100”, “1010”, “1001”
Approach: The task can be solved by using recursion. If N is odd, then the answer is -1, else, we can use recursion to generate all the binary strings with equal 0s and 1s. Follow the below steps to solve the problem:
- Variable ones keep track of the number of 1’s and variable zeros keeps a track of the number of 0’s in the string.
- Both ones and zeros should have frequency N/2.
- Base condition: The string s stores the output string. So, when the length of s reaches N we stop recursive calls and print the output string s.
- If the frequency of 1’s is less than N/2 then add 1 to the string and increment ones.
- If the frequency of 0’s is less than N/2 then add 0 to the string and increment zeros.
Below is the implementation of the above code:
// C++ code for the above approach #include <bits/stdc++.h> using namespace std;
// Recursive function that prints // all strings of N length with equal 1's and 0's void binaryNum( int n, string s, int ones,
int zeros)
{ // String s contains the output to be printed
// ones stores the frequency of 1's
// zeros stores the frequency of 0's
// Base Condition: When the length of string s
// becomes N
if (s.length() == n)
{
cout << (s) << endl;
return ;
}
// If frequency of 1's is less than N/2 then
// add 1 to the string and increment ones
if (ones < n / 2)
binaryNum(n, s + "1" , ones + 1, zeros);
// If frequency of 0's is less than N/2 then
// add 0 to the string and increment zeros
if (zeros < n / 2)
binaryNum(n, s + "0" , ones, zeros + 1);
} // Driver Code int main()
{ string s = "" ;
binaryNum(4, s, 0, 0);
return 0;
} // This code is contributed by Potta Lokesh |
// Java program for the above approach import java.io.*;
class GFG {
// Recursive function that prints
// all strings of N length with equal 1's and 0's
static void binaryNum( int n, String s, int ones,
int zeros)
{
// String s contains the output to be printed
// ones stores the frequency of 1's
// zeros stores the frequency of 0's
// Base Condition: When the length of string s
// becomes N
if (s.length() == n) {
System.out.println(s);
return ;
}
// If frequency of 1's is less than N/2 then
// add 1 to the string and increment ones
if (ones < n / 2 )
binaryNum(n, s + "1" , ones + 1 , zeros);
// If frequency of 0's is less than N/2 then
// add 0 to the string and increment zeros
if (zeros < n / 2 )
binaryNum(n, s + "0" , ones, zeros + 1 );
}
// Driver Code
public static void main(String[] args)
{
String s = "" ;
binaryNum( 4 , s, 0 , 0 );
}
} |
# python code for the above approach # Recursive function that prints # all strings of N length with equal 1's and 0's def binaryNum(n, s, ones, zeros):
# String s contains the output to be printed
# ones stores the frequency of 1's
# zeros stores the frequency of 0's
# Base Condition: When the length of string s
# becomes N
if ( len (s) = = n):
print (s)
return
# If frequency of 1's is less than N/2 then
# add 1 to the string and increment ones
if (ones < n / 2 ):
binaryNum(n, s + "1" , ones + 1 , zeros)
# If frequency of 0's is less than N/2 then
# add 0 to the string and increment zeros
if (zeros < n / 2 ):
binaryNum(n, s + "0" , ones, zeros + 1 )
# Driver Code if __name__ = = "__main__" :
s = ""
binaryNum( 4 , s, 0 , 0 )
# This code is contributed by rakeshsahni |
// C# program for the above approach using System;
class GFG {
// Recursive function that prints
// all strings of N length with equal 1's and 0's
static void binaryNum( int n, string s, int ones,
int zeros)
{
// String s contains the output to be printed
// ones stores the frequency of 1's
// zeros stores the frequency of 0's
// Base Condition: When the length of string s
// becomes N
if (s.Length == n) {
Console.WriteLine(s);
return ;
}
// If frequency of 1's is less than N/2 then
// add 1 to the string and increment ones
if (ones < n / 2)
binaryNum(n, s + "1" , ones + 1, zeros);
// If frequency of 0's is less than N/2 then
// add 0 to the string and increment zeros
if (zeros < n / 2)
binaryNum(n, s + "0" , ones, zeros + 1);
}
// Driver Code
public static void Main( string [] args)
{
string s = "" ;
binaryNum(4, s, 0, 0);
}
} // This code is contributed by ukasp. |
<script> // javascript program for the above approach // Recursive function that prints
// all strings of N length with equal 1's and 0's
function binaryNum(n, s, ones, zeros)
{
// String s contains the output to be printed
// ones stores the frequency of 1's
// zeros stores the frequency of 0's
// Base Condition: When the length of string s
// becomes N
if (s.length == n) {
document.write(s+ "<br>" );
return ;
}
// If frequency of 1's is less than N/2 then
// add 1 to the string and increment ones
if (ones < n / 2)
binaryNum(n, s + "1" , ones + 1, zeros);
// If frequency of 0's is less than N/2 then
// add 0 to the string and increment zeros
if (zeros < n / 2)
binaryNum(n, s + "0" , ones, zeros + 1);
}
// Driver Code var s = "" ;
binaryNum(4, s, 0, 0); // This code is contributed by 29AjayKumar </script> |
1100 1010 1001 0110 0101 0011
Time Complexity: O(2N)
Auxiliary Space: O(1)