Given an integer K. Task is Print All binary string of size K (Given number).
Examples:
Input : K = 3
Output : 000 , 001 , 010 , 100 , 101
Input : K = 4
Output :0000 0001 0010 0100 0101 1000 1001 1010
Idea behind that is IF string ends with ‘1’ then we put only ‘0’ at the end. IF string ends with ‘0’ then we put both ‘0’ and ‘1’ at the end of string for generating new string.
Below is algorithm
K : size of string
First We Generate All string starts with '0'
initialize n = 1 .
GenerateALLString ( K , Str , n )
a. IF n == K
PRINT str.
b. IF previous character is '1' :: str[n-1] == '1'
put str[n] = '0'
GenerateAllString ( K , str , n+1 )
c. IF previous character is '0' :: str[n-1] == '0'
First We Put zero at end and call function
PUT str[n] = '0'
GenerateAllString ( K , str , n+1 )
PUT str[n] = '1'
GenerateAllString ( K , str , n+1 )
Second Generate all binary string starts with '1'
DO THE SAME PROCESS
Below is the recursive implementation:
C++
#include<bits/stdc++.h>
using namespace std ;
void generateAllStringsUtil( int K, char str[], int n)
{
if (n == K)
{
str[n] = '\0' ;
cout << str << " " ;
return ;
}
if (str[n-1] == '1' )
{
str[n] = '0' ;
generateAllStringsUtil (K , str , n+1);
}
if (str[n-1] == '0' )
{
str[n] = '0' ;
generateAllStringsUtil(K, str, n+1);
str[n] = '1' ;
generateAllStringsUtil(K, str, n+1) ;
}
}
void generateAllStrings( int K )
{
if (K <= 0)
return ;
char str[K];
str[0] = '0' ;
generateAllStringsUtil ( K , str , 1 ) ;
str[0] = '1' ;
generateAllStringsUtil ( K , str , 1 );
}
int main()
{
int K = 3;
generateAllStrings (K) ;
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
public class BinaryS {
public static String toString( char [] a) {
String string = new String(a);
return string;
}
static void generate( int k, char [] ch, int n) {
if (n == k) {
System.out.print(toString(ch)+ " " );
return ;
}
if (ch[n - 1 ] == '0' ) {
ch[n] = '0' ;
generate(k, ch, n + 1 );
ch[n] = '1' ;
generate(k, ch, n + 1 );
}
if (ch[n - 1 ] == '1' ) {
ch[n] = '0' ;
generate(k, ch, n + 1 );
}
}
static void fun( int k) {
if (k <= 0 ) {
return ;
}
char [] ch = new char [k];
ch[ 0 ] = '0' ;
generate(k, ch, 1 );
ch[ 0 ] = '1' ;
generate(k, ch, 1 );
}
public static void main(String args[]) {
int k = 3 ;
fun(k);
}
}
|
Python3
def generateAllStringsUtil(K, str , n):
if (n = = K):
print ( * str [:n], sep = " ", end = " ")
return
if ( str [n - 1 ] = = '1' ):
str [n] = '0'
generateAllStringsUtil (K, str , n + 1 )
if ( str [n - 1 ] = = '0' ):
str [n] = '0'
generateAllStringsUtil(K, str , n + 1 )
str [n] = '1'
generateAllStringsUtil(K, str , n + 1 )
def generateAllStrings(K):
if (K < = 0 ):
return
str = [ 0 ] * K
str [ 0 ] = '0'
generateAllStringsUtil (K, str , 1 )
str [ 0 ] = '1'
generateAllStringsUtil (K, str , 1 )
K = 3
generateAllStrings (K)
|
C#
using System;
class GFG {
static string toString( char [] a) {
string String = new string (a);
return String;
}
static void generate( int k, char [] ch, int n) {
if (n == k) {
Console.Write(toString(ch)+ " " );
return ;
}
if (ch[n - 1] == '0' ) {
ch[n] = '0' ;
generate(k, ch, n + 1);
ch[n] = '1' ;
generate(k, ch, n + 1);
}
if (ch[n - 1] == '1' ) {
ch[n] = '0' ;
generate(k, ch, n + 1);
}
}
static void fun( int k)
{
if (k <= 0)
{
return ;
}
char [] ch = new char [k];
ch[0] = '0' ;
generate(k, ch, 1);
ch[0] = '1' ;
generate(k, ch, 1);
}
static void Main()
{
int k = 3;
fun(k);
}
}
|
Javascript
<script>
function generateAllStringsUtil(K, str, n)
{
if (n == K)
{
str[n] = '\0' ;
document.write(str.join( "" ) + " " );
return ;
}
if (str[n-1] == '1' )
{
str[n] = '0' ;
generateAllStringsUtil (K , str , n+1);
}
if (str[n-1] == '0' )
{
str[n] = '0' ;
generateAllStringsUtil(K, str, n+1);
str[n] = '1' ;
generateAllStringsUtil(K, str, n+1) ;
}
}
function generateAllStrings(K )
{
if (K <= 0)
return ;
var str = new Array(K);
str[0] = '0 ' ;
generateAllStringsUtil ( K , str , 1 ) ;
// Generate all Binary string
// starts with ' 1 '
str[0] = ' 1' ;
generateAllStringsUtil ( K , str , 1 );
}
var K = 3;
generateAllStrings(K);
</script>
|
Output
000 001 010 100 101
This problem is solved by using a recursion tree having two possibilities 0 or 1 just like selecting elements in a subsequence.
So we can also implement above approach using boolean array as well.
C++14
#include <bits/stdc++.h>
using namespace std;
void All_Binary_Strings( bool arr[], int num, int r)
{
if (r==num)
{
for ( int i=0;i<num;i++)
cout<<arr[i];
cout<< " " ;
return ;
}
else if (arr[r-1])
{
arr[r]=0;
All_Binary_Strings(arr,num,r+1);
}
else
{
arr[r]=0;
All_Binary_Strings(arr,num,r+1);
arr[r]=1;
All_Binary_Strings(arr,num,r+1);
}
}
void print( bool a[], int & num)
{
a[0]=0;
All_Binary_Strings(a,num,1);
a[0]=1;
All_Binary_Strings(a,num,1);
}
int main()
{
int n=2;
bool a[n];
print(a,n);
return 0;
}
|
Java
import java.io.*;
class GFG {
static void All_Binary_Strings( int arr[], int num, int r)
{
if (r == num)
{
for ( int i = 0 ; i < num; i++)
System.out.print(arr[i]);
System.out.print( " " );
return ;
}
else if (arr[r- 1 ] == 1 )
{
arr[r] = 0 ;
All_Binary_Strings(arr,num,r+ 1 );
}
else
{
arr[r] = 0 ;
All_Binary_Strings(arr,num,r+ 1 );
arr[r] = 1 ;
All_Binary_Strings(arr,num,r+ 1 );
}
}
static void print( int a[], int num)
{
a[ 0 ] = 0 ;
All_Binary_Strings(a,num, 1 );
a[ 0 ] = 1 ;
All_Binary_Strings(a,num, 1 );
}
public static void main(String args[])
{
int n = 2 ;
int a[] = new int [n];
print(a,n);
}
}
|
Python3
def All_Binary_Strings(arr,num,r):
if (r = = num):
for i in range (num):
print (arr[i],end = "")
print (end = " " )
return
elif (arr[r - 1 ]):
arr[r] = 0
All_Binary_Strings(arr, num, r + 1 )
else :
arr[r] = 0
All_Binary_Strings(arr,num,r + 1 )
arr[r] = 1
All_Binary_Strings(arr,num,r + 1 )
def Print (a,num):
a[ 0 ] = 0
All_Binary_Strings(a,num, 1 )
a[ 0 ] = 1
All_Binary_Strings(a,num, 1 )
n = 2
a = [ False for i in range (n)]
Print (a,n)
|
C#
using System;
public static class GFG {
public static void All_Binary_Strings( int [] arr,
int num, int r)
{
if (r == num) {
for ( int i = 0; i < num; i++) {
Console.Write(arr[i]);
}
Console.Write( " " );
return ;
}
else if (arr[r - 1] == 1) {
arr[r] = 0;
All_Binary_Strings(arr, num, r + 1);
}
else {
arr[r] = 0;
All_Binary_Strings(arr, num, r + 1);
arr[r] = 1;
All_Binary_Strings(arr, num, r + 1);
}
}
public static void print( int [] a, ref int num)
{
a[0] = 0;
All_Binary_Strings(a, num, 1);
a[0] = 1;
All_Binary_Strings(a, num, 1);
}
public static void Main()
{
int n = 2;
int [] a = new int [n];
print(a, ref n);
}
}
|
Javascript
<script>
function All_Binary_Strings(arr,num,r)
{
if (r == num)
{
for (let i = 0; i < num; i++)
document.write(arr[i]);
document.write( " " );
return ;
}
else if (arr[r-1])
{
arr[r] = 0;
All_Binary_Strings(arr, num, r + 1);
}
else
{
arr[r] = 0;
All_Binary_Strings(arr,num,r+1);
arr[r] = 1;
All_Binary_Strings(arr,num,r+1);
}
}
function print(a,num)
{
a[0] = 0;
All_Binary_Strings(a,num,1);
a[0] = 1;
All_Binary_Strings(a,num,1);
}
let n=2;
let a = new Array(n).fill( false );
print(a,n);
</script>
|
The above approach can also be solved using string. It does not have any effect on complexity but string handling, printing and operating is easy.
C++14
#include <bits/stdc++.h>
using namespace std;
void All_Binary_Strings(string str, int num)
{
int len=str.length();
if (len==num)
{
cout<<str<< " " ;
return ;
}
else if (str[len-1]== '1' )
All_Binary_Strings(str+ '0' ,num);
else
{
All_Binary_Strings(str+ '0' ,num);
All_Binary_Strings(str+ '1' ,num);
}
}
void print( int & num)
{
string word;
word.push_back( '0' );
All_Binary_Strings(word,num);
word[0]= '1' ;
All_Binary_Strings(word,num);
}
int main()
{
int n=4;
print(n);
return 0;
}
|
Python3
def All_Binary_Strings( str ,num):
Len = len ( str )
if ( Len = = num):
print ( str ,end = " " )
return
elif ( str [ Len - 1 ] = = '1' ):
All_Binary_Strings( str + '0' ,num)
else :
All_Binary_Strings( str + '0' ,num)
All_Binary_Strings( str + '1' ,num)
def Print (num):
word = ""
word + = '0'
All_Binary_Strings(word,num)
word = '1'
All_Binary_Strings(word,num)
n = 4
Print (n)
|
Javascript
<script>
function All_Binary_Strings(str,num)
{
let len = str.length;
if (len == num)
{
document.write(str, " " );
return ;
}
else if (str[len - 1]== '1' )
All_Binary_Strings(str+ '0' ,num);
else
{
All_Binary_Strings(str+ '0' ,num);
All_Binary_Strings(str+ '1' ,num);
}
}
function print(num)
{
let word = "" ;
word += '0' ;
All_Binary_Strings(word,num);
word = '1' ;
All_Binary_Strings(word,num);
}
let n = 4;
print(n);
</script>
|
Output
0000 0001 0010 0100 0101 1000 1001 1010
Time Complexity: O(2^n)
Auxiliary Space: O(n)
This article is contributed by Nishant Singh . If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.