📜  门|门CS 2012 |问题 7(1)

📅  最后修改于: 2023-12-03 14:58:37.486000             🧑  作者: Mango

门|门CS 2012 |问题 7

这个问题要求我们列出所有的长度为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']