题解 | #火车进站#

火车进站

https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static LinkedList<Integerdeque = new LinkedList();
    static ArrayList<Stringlist = new ArrayList();
    static int[] arr;
    static int N;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while(scan.hasNextInt()) {
            N = scan.nextInt();
            arr = new int[N];
            for(int i =0;i<arr.length;i++) {
                arr[i]=scan.nextInt();
            }

            f (00"");
            
            Collections.sort(list);
            for(String s:list) {
                System.out.println(s);
            }
            deque.clear();
            list.clear();
        }
    }
    /**
     * 
     * @param i 当前要进站的车序号
     * @param s_out 累计出站的车数
     * @param path 出站顺序记录
     */
    public static void f(int iint s_outString path) {
        //前面的不用出,新来的直接进站
        if(i<N) {
            //新来的进站
            deque.push(arr[i]);
            // 通知再下一辆进站
            f(i+1, s_out, path);// i+1 不能超过N,数组下标不能越界
            deque.pop();// 回复原样,走下面的逻辑
        }
        
        //先等前面的出栈,这个再进站
        if(!deque.isEmpty()) {
            int x = deque.pop();
            if(s_out+1 ==N) {// 所有车子都出站了
                list.add(path+x);
                deque.push(x); //复原返回上层调用
                return;
            }
            f(i, s_out+1, path+x+" ");
            deque.push(x);//复原返回上层调用
        }  
    }
}
全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务