火车进站

给定 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]
原文地址:https://www.cnblogs.com/bill-h/p/14317497.html