Algorithm 描述一种递归算法,用于打印没有任何连续1的所有N位二进制字符串

Algorithm 描述一种递归算法,用于打印没有任何连续1的所有N位二进制字符串,algorithm,recursion,binary,Algorithm,Recursion,Binary,我找到了一个提供连续1的解决方案,但是我找不到任何在二进制字符串中不包含连续1的内容,有人能帮我吗?这里有一种方法(使用的伪代码恰好是有效的Python): 它生成长度为n-1的所有字符串,然后: 追加0以形成长度为n的有效字符串 附加一个1,但前提是它不会违反约束 这里有一个简单的例子 def f(n, result=""): if n==0: print(result) return if len(result) == 0 or resul

我找到了一个提供连续1的解决方案,但是我找不到任何在二进制字符串中不包含连续1的内容,有人能帮我吗?

这里有一种方法(使用的伪代码恰好是有效的Python):

它生成长度为
n-1
的所有字符串,然后:

  • 追加
    0
    以形成长度为
    n
    的有效字符串
  • 附加一个
    1
    ,但前提是它不会违反约束
    • 这里有一个简单的例子

      def f(n, result=""):
          if n==0:
              print(result)
              return
      
          if len(result) == 0 or result[-1]=="0":
              f(n-1, result+"1")
          f(n-1, result+"0")
      

      如果您正在寻找递归算法,我想使用一个递归函数,根据字符串的最后一个字符向字符串添加
      '0'
      '1'

      我下面的解决方案调用递归,直到字符串的长度达到给定的
      n
      。它的递归调用是1)通过向字符串中添加
      '0'
      ,2)如果前一个字符不是
      '1'
      ,则通过向字符串中添加
      '1'
      。仅当前一个字符不是
      '1'
      时才追加
      '1'
      将阻止字符串包含连续的
      '1'
      s。由于两个递归调用,最坏情况下的时间复杂度为O(2^n),而空间复杂度为O(n),因为递归深度为n

      void printNDigitBinaries(int n) {
          printBinHelper(n, "");
      }
      
      void printBinHelper(int n, String s) {
          if (s.length() == n) {
              System.out.println(s);
              return;
          }
      
          printBinHelper(n, s+"0");
          if (s.length() == 0 || s.charAt(s.length()-1) != '1') printBinHelper(n, s+"1");
      }
      

      从空字符串递归。在每次调用时,决定在基字符串的最后一个字符上追加什么。当字符串达到所需大小时终止

      def递归(基本,n):
      #终止标准
      如果len(base)==n:`
      打印(基本)
      #如果基字符串以“0”结尾或为空,则可以添加“0”或“1”
      #然后再发生。连续零不存在任何问题。
      elif base==“”或base[-1]==“0”:
      递归(基+“0”,n)
      递归(基+“1”,n)
      #若要防止连续的“1”,请仅将“0”附加到结束的基字符串
      #使用“0”
      elif基[-1]=“1”:
      递归(基+“0”,n)
      n=int(输入())
      递归(“,n)
      
      对于n=5,输出为:

      00000 00001 00010 00100 00101 01000 01001 01010 10000 10001 10010 10100 10101


      在每个递归级别,您都有两个选项,向字符串添加
      0
      ,或向字符串添加
      10
      void printNDigitBinaries(int n) {
          printBinHelper(n, "");
      }
      
      void printBinHelper(int n, String s) {
          if (s.length() == n) {
              System.out.println(s);
              return;
          }
      
          printBinHelper(n, s+"0");
          if (s.length() == 0 || s.charAt(s.length()-1) != '1') printBinHelper(n, s+"1");
      }