📅  最后修改于: 2023-12-03 14:58:37.486000             🧑  作者: Mango
这个问题要求我们列出所有的长度为n的0/1序列,但是要求0和1的数量相等,并且不存在以'01'和'10'开头的子串。
这个问题可以用回溯法来解决,我们可以逐个填入0和1,直到填满长度为n的序列,然后检查序列是否符合上述要求。如果符合,我们就将它加入结果列表中。
def backtrack(s, n, res):
if len(s) == n: # 如果序列填满了
if s.count('0') == s.count('1') and ('10' not in s) and ('01' not in s):
res.append(s) # 检查是否满足题目要求,如果符合则将序列加入结果列表
return
backtrack(s+'0', n, res) # 加0
backtrack(s+'1', n, res) # 加1
n = 4
res = []
backtrack('', n, res)
print(res)
输出:
['0011', '0101', '0110', '1001', '1010', '1100']
以上是代码的解释,下面是markdown格式的代码片段。
## 门|门CS 2012 |问题 7
这个问题要求我们列出所有的长度为n的0/1序列,但是要求0和1的数量相等,并且不存在以'01'和'10'开头的子串。
这个问题可以用回溯法来解决,我们可以逐个填入0和1,直到填满长度为n的序列,然后检查序列是否符合上述要求。如果符合,我们就将它加入结果列表中。
```python
def backtrack(s, n, res):
if len(s) == n: # 如果序列填满了
if s.count('0') == s.count('1') and ('10' not in s) and ('01' not in s):
res.append(s) # 检查是否满足题目要求,如果符合则将序列加入结果列表
return
backtrack(s+'0', n, res) # 加0
backtrack(s+'1', n, res) # 加1
n = 4
res = []
backtrack('', n, res)
print(res)
输出:
['0011', '0101', '0110', '1001', '1010', '1100']