首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >描述一种递归算法,用于打印不包含任何连续1的所有N位二进制字符串

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

Stack Overflow用户
提问于 2019-10-13 04:54:29
回答 4查看 420关注 0票数 0

我找到了一个给出连续1的解决方案,但我找不到任何在二进制字符串中不包含连续1的东西,有人能帮我吗?

EN

回答 4

Stack Overflow用户

发布于 2019-10-13 05:01:34

以下是一种方法(在恰好是有效Python的伪代码中):

代码语言:javascript
复制
def gen(n):
  if n == 0:
    yield ''
    return
  for s in gen(n-1):
    yield s + '0'
    if s == '' or s[-1] == '0':
      yield s + '1'

for s in gen(5):
  print(s)

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

  • 会追加一个0,以形成一个长度为1的有效字符串,但前提是它不会违反约束。
票数 0
EN

Stack Overflow用户

发布于 2019-10-13 05:08:49

这里有一个简单的例子。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-10-13 05:23:39

如果你正在寻找一种递归算法,我正在考虑一个递归函数,它根据字符串的最后一个字符将'0''1'添加到字符串中。

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

代码语言:javascript
复制
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");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58358411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档