火车进站
给定 N 辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。求所有的火车出站的方案。
例如给定输入
1 2 3
输出为
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
该问题属于栈的问题,可以用递归的思想解决,即每次操作只有两种选项:
1.输入的元素压栈;
2.栈顶的元素出栈;
代码如下
def f(arr1,arr2): # arr1含栈内元素,aar2含待入栈元素
if len(arr1)==0 and len(arr2)==0:
return []
elif len(arr1)==0 and len(arr2)>0: # 入栈
return f(arr2[0:1], arr2[1:])
elif len(arr1)>0 and len(arr2)==0: # 出栈
return [arr1[::-1]]
else:
out1 = f(arr1+arr2[0:1], arr2[1:]) # 入栈
out2 = f(arr1[:-1], arr2) # 出栈
for i in out2:
i.insert(0,arr1[-1])
return out1+out2
arr = [1, 2, 5, 3]
out = f([],arr)
for i in sorted(out):
print(i)
运行结果
[1, 2, 3, 5]
[1, 2, 5, 3]
[1, 3, 5, 2]
[1, 5, 2, 3]
[1, 5, 3, 2]
[2, 1, 3, 5]
[2, 1, 5, 3]
[2, 3, 5, 1]
[2, 5, 1, 3]
[2, 5, 3, 1]
[3, 5, 2, 1]
[5, 2, 1, 3]
[5, 2, 3, 1]
[5, 3, 2, 1]