📅  最后修改于: 2023-12-03 15:23:04.710000             🧑  作者: Mango
给定一个正整数N,你需要找到所有由数字1,2和3组成的长度为N的字符串,使得1不是相邻的数字。这里,两个连续的数字可以是相同的。
3
121
123
131
132
212
213
231
232
312
313
321
323
首先可以很快的想到用递归的方式来解决这个问题,同时,我们需要发现,在当前已经形成的字符串中,如果该字符串的最后一位是字符"1",那么下一个字符只能是字符"2"和字符"3"。如果该字符串的最后一位是字符"2"或者字符"3",那么下一个字符可以是字符"1"、"2"或者"3"。依次递归下去即可。
def dfs(n, s):
if len(s) == n:
print(s)
return
if s == "" or s[-1] == "2" or s[-1] == "3":
dfs(n, s + "1")
dfs(n, s + "2")
dfs(n, s + "3")
n = int(input())
dfs(n, "")