Skip to content
Related Articles

Related Articles

Improve Article

Generate all binary strings without consecutive 1’s

  • Difficulty Level : Medium
  • Last Updated : 16 Jun, 2021

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++




// C++ program to Generate
// all binary string without
// consecutive 1's of size K
#include<bits/stdc++.h>
using namespace std ;
 
// A utility function generate all string without
// consecutive 1'sof size K
void generateAllStringsUtil(int K, char str[], int n)
{
     
    // Print binary string without consecutive 1's
    if (n  == K)
    {
         
        // Terminate binary string
        str[n] = '\0' ;
        cout << str << " ";
        return ;
    }
 
    // If previous character is '1' then we put
    // only 0 at end of string
    //example str = "01" then new string be "010"
    if (str[n-1] == '1')
    {
        str[n] = '0';
        generateAllStringsUtil (K , str , n+1);
    }
 
    // If previous character is '0' than we put
    // both '1' and '0' at end of string
    // example str = "00" then
    // new string "001" and "000"
    if (str[n-1] == '0')
    {
        str[n] = '0';
        generateAllStringsUtil(K, str, n+1);
        str[n] = '1';
        generateAllStringsUtil(K, str, n+1) ;
    }
}
 
// Function generate all binary string without
// consecutive 1's
void generateAllStrings(int K )
{
    // Base case
    if (K <= 0)
        return ;
 
    // One by one stores every
    // binary string of length K
    char str[K];
 
    // Generate all Binary string
    // starts with '0'
    str[0] = '0' ;
    generateAllStringsUtil ( K , str , 1 ) ;
 
    // Generate all Binary string
    // starts with '1'
    str[0] = '1' ;
    generateAllStringsUtil ( K , str , 1 );
}
 
// Driver program to test above function
int main()
{
    int K = 3;
    generateAllStrings (K) ;
    return 0;
}

Java




// Java program to Generate all binary string without
// consecutive 1's of size K
import java.util.*;
import java.lang.*;
 
public class BinaryS {
 
    // Array conversion to String--
    public static String toString(char[] a) {
        String string = new String(a);
        return string;
    }
 
    static void generate(int k, char[] ch, int n) {
       
        // Base Condition when we
        // reached at the end of Array**
        if (n == k) {
           
            // Printing the Generated String**
            // Return to the previous case*
            System.out.print(toString(ch)+" ");
            return;
 
        }
       
        // If the first Character is
        //Zero then adding**
        if (ch[n - 1] == '0') {
            ch[n] = '0';
            generate(k, ch, n + 1);
            ch[n] = '1';
            generate(k, ch, n + 1);
        }
       
        // If the Character is One
        // then add Zero to next**
        if (ch[n - 1] == '1') {
 
            ch[n] = '0';
           
            // Calling Recursively for the
            // next value of Array
            generate(k, ch, n + 1);
 
        }
    }
 
    static void fun(int k) {
 
        if (k <= 0) {
            return;
        }
 
        char[] ch = new char[k];
       
        // Initializing first character to Zero
        ch[0] = '0';
       
        // Generating Strings starting with Zero--
        generate(k, ch, 1);
 
        // Initialized first Character to one--
        ch[0] = '1';
        generate(k, ch, 1);
 
    }
 
    public static void main(String args[]) {
 
        int k = 3;
       
        //Calling function fun with argument k
        fun(k);
       
        //This code is Contributed by Praveen Tiwari
    }
}

Python3




# Python3 program to Generate all binary string
# without consecutive 1's of size K
 
# A utility function generate all string without
# consecutive 1'sof size K
def generateAllStringsUtil(K, str, n):
     
    # print binary string without consecutive 1's
    if (n == K):
         
        # terminate binary string
        print(*str[:n], sep = "", end = " ")
        return
     
    # if previous character is '1' then we put
    # only 0 at end of string
    # example str = "01" then new string be "000"
    if (str[n-1] == '1'):
        str[n] = '0'
        generateAllStringsUtil (K, str, n + 1)
         
    # if previous character is '0' than we put
    # both '1' and '0' at end of string
    # example str = "00" then new string "001" and "000"
    if (str[n-1] == '0'):
        str[n] = '0'
        generateAllStringsUtil(K, str, n + 1)
        str[n] = '1'
        generateAllStringsUtil(K, str, n + 1)
         
# function generate all binary string without
# consecutive 1's
def generateAllStrings(K):
     
    # Base case
    if (K <= 0):
        return
     
    # One by one stores every
    # binary string of length K
    str = [0] * K
     
    # Generate all Binary string starts with '0'
    str[0] = '0'
    generateAllStringsUtil (K, str, 1)
     
    # Generate all Binary string starts with '1'
    str[0] = '1'
    generateAllStringsUtil (K, str, 1)
 
# Driver code
K = 3
generateAllStrings (K)
 
# This code is contributed by SHUBHAMSINGH10

C#




// C# program to Generate
// all binary string without
// consecutive 1's of size K
using System;
class GFG {
 
  // Array conversion to String--
  static string toString(char[] a) {
    string String = new string(a);
    return String;
  }
 
  static void generate(int k, char[] ch, int n) {
 
    // Base Condition when we
    // reached at the end of Array**
    if (n == k) {
 
      // Printing the Generated String**
      // Return to the previous case*
      Console.Write(toString(ch)+" ");
      return;
 
    }
 
    // If the first Character is
    //Zero then adding**
    if (ch[n - 1] == '0') {
      ch[n] = '0';
      generate(k, ch, n + 1);
      ch[n] = '1';
      generate(k, ch, n + 1);
    }
 
    // If the Character is One
    // then add Zero to next**
    if (ch[n - 1] == '1') {
 
      ch[n] = '0';
 
      // Calling Recursively for the
      // next value of Array
      generate(k, ch, n + 1);
 
    }
  }
 
  static void fun(int k)
  {
    if (k <= 0)
    {
      return;
    }
    char[] ch = new char[k];
 
    // Initializing first character to Zero
    ch[0] = '0';
 
    // Generating Strings starting with Zero--
    generate(k, ch, 1);
 
    // Initialized first Character to one--
    ch[0] = '1';
    generate(k, ch, 1);
 
  }
 
  // Driver code
  static void Main()
  {
    int k = 3;
 
    //Calling function fun with argument k
    fun(k);
  }
}
 
// This code is contributed by divyeshrabadiya07.

Javascript




<script>
// Javascript implementation
 
// A utility function generate all string without
// consecutive 1'sof size K
function generateAllStringsUtil(K, str, n)
{
      
    // Print binary string without consecutive 1's
    if (n  == K)
    {
          
        // Terminate binary string
        str[n] = '\0' ;
        document.write(str.join("") + " ");
        return ;
    }
  
    // If previous character is '1' then we put
    // only 0 at end of string
    //example str = "01" then new string be "010"
    if (str[n-1] == '1')
    {
        str[n] = '0';
        generateAllStringsUtil (K , str , n+1);
    }
  
    // If previous character is '0' than we put
    // both '1' and '0' at end of string
    // example str = "00" then
    // new string "001" and "000"
    if (str[n-1] == '0')
    {
        str[n] = '0';
        generateAllStringsUtil(K, str, n+1);
        str[n] = '1';
        generateAllStringsUtil(K, str, n+1) ;
    }
}
  
// Function generate all binary string without
// consecutive 1's
function generateAllStrings(K )
{
    // Base case
    if (K <= 0)
        return ;
  
    // One by one stores every
    // binary string of length K
    var str = new Array(K);
  
    // Generate all Binary string
    // starts with '0'
    str[0] = '0' ;
    generateAllStringsUtil ( K , str , 1 ) ;
  
    // Generate all Binary string
    // starts with '1'
    str[0] = '1' ;
    generateAllStringsUtil ( K , str , 1 );
}
 
/* Driver code */
var K = 3;
generateAllStrings(K);
 
// This is code is contributed
// by shivani
</script>

Output: 

 000 001 010 100 101

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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :