寻找另一种解决二进制字符串问题的尝试

时间:2015-12-21 20:36:20

标签: c++ algorithm binary

我很久以前就解决了二进制字符串这个问题:

  

有多少二进制字符串长度为N且不包含任何连续的第1位?打印所有情况都可以存在。按您想要的任何顺序打印“。

     

例如:当N = 3时,我们有:

     

100

     

101

     

010

     

001

     

000

我使用生成方法来解决它,它的时间复杂度是O(2 ^ N)或O(N * 2 ^ N) - 正如我们所知。

昨天,我的朋友问我这个问题,我告诉他解决问题的方法,我也想通过降低时间复杂度来解决它的另一种方法 - 它可能是O(n ^ 2)或其他。

有没有人可以用时间复杂度小于O(2 ^ N)来解决它?

感谢。

1 个答案:

答案 0 :(得分:0)

的Python。没有数学,只有字符串。

import sys
def nodup(n, prefix=""):
  if n == 0:
    print(prefix)
  elif n == 1:
    print(prefix+"0")
    print(prefix+"1")
  else:
    nodup(n-1, prefix+"0")
    nodup(n-2, prefix+"10")

nodup(int(sys.argv[1]))