📌  相关文章
📜  生成所有不带连续1的二进制字符串

📅  最后修改于: 2021-04-29 15:11:20             🧑  作者: Mango

给定一个整数K。任务是打印所有大小为K(给定数字)的二进制字符串。
例子:

Input : K = 3  
Output : 000 , 001 , 010 , 100 , 101 

Input : K  = 4 
Output :0000 0001 0010 0100 0101 1000 1001 1010

其背后的想法是,如果字符串以“ 1”结尾,那么我们仅将“ 0”放在结尾。如果字符串以’0’结尾,那么我们将’0’和’1’放在字符串的末尾以生成新的字符串。
下面是算法

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

以下是递归实现:

C++
// C++ program to Generate
// all binary string without
// consecutive 1's of size K
#include
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];
       
        // Intializing first character to Zero
        ch[0] = '0';
       
        // Generating Strings starting with Zero--
        generate(k, ch, 1);
 
        // Intialized 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];
 
    // Intializing first character to Zero
    ch[0] = '0';
 
    // Generating Strings starting with Zero--
    generate(k, ch, 1);
 
    // Intialized 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.


输出:

000 001 010 100 101