1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| def generate_sequences(n, stack=[], sequence=[], result=[], in_stack=1):
"""
生成所有合法出栈序列
:param n: 总数
:param stack: 当前栈状态
:param sequence: 已生成的出栈序列
:param result: 结果列表
:param in_stack: 下一个要入栈的数字
"""
if len(sequence) == n:
result.append(sequence[:]) # 必须拷贝
return
# 入栈操作
if in_stack <= n:
stack.append(in_stack)
generate_sequences(n, stack, sequence, result, in_stack + 1)
stack.pop() # 回溯
# 出栈操作
if stack:
sequence.append(stack.pop())
generate_sequences(n, stack, sequence, result, in_stack)
stack.append(sequence.pop()) # 回溯
# 使用示例
result = []
generate_sequences(3, result=result)
for seq in result:
print(seq)
# 输出:[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1]
|
Comments