我很久以前就解决了二进制字符串这个问题:
有多少二进制字符串长度为N且不包含任何连续的第1位?打印所有情况都可以存在。按您想要的任何顺序打印“。
例如:当N = 3时,我们有:
100
101
010
001
000
我使用生成方法来解决它,它的时间复杂度是O(2 ^ N)或O(N * 2 ^ N) - 正如我们所知。
昨天,我的朋友问我这个问题,我告诉他解决问题的方法,我也想通过降低时间复杂度来解决它的另一种方法 - 它可能是O(n ^ 2)或其他。
有没有人可以用时间复杂度小于O(2 ^ N)来解决它?
感谢。
答案 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]))