zoukankan      html  css  js  c++  java
  • 火车进站

    给定 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]
    
  • 相关阅读:
    DOM节点类型
    javascript中的变量、作用域
    this 不同情况指代的对象
    BOM对象节点
    浏览器兼容性
    总结
    javascript事件流讲解和实例应用
    7.20
    7.16总结
    飞机大战
  • 原文地址:https://www.cnblogs.com/bill-h/p/14317497.html
Copyright © 2011-2022 走看看