HJ77 火车进站

题目:

HJ77 火车进站

题解:

递归。

1.如果还有火车还有未进站,可以选择进站或者不进站。

2.如果车站还有车未出站,可以选择出站或者不出站。

进站火车压入栈中,出站时出栈。

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
  
        int n = Integer.parseInt(in.nextLine());
        List list = new ArrayList(n);

        String[] strings = in.nextLine().split(" ");
        for(String s : strings) {
            list.add(s);
        }

        List resultList = new ArrayList();
        Main main = new Main();
        main.train(resultList, new ArrayList(), new Stack(), list, 0);

        resultList.sort(Comparator.naturalOrder());
        for(String s : resultList) {
            System.out.println(s);
        }
    }

    public void train(List resultList, List pathList,
                       Stack trainStack, List list, int index) {
        if (pathList.size() == list.size()) {

            resultList.add(String.join(" ", pathList));
            return;
        }

        if (index < list.size()) {
            trainStack.push(list.get(index));
            train(resultList, pathList, trainStack, list, index + 1);
            trainStack.pop();
        }

        if (!trainStack.isEmpty()) {
            String peek = trainStack.pop();
            pathList.add(peek);
            train(resultList, pathList, trainStack, list, index);
            pathList.remove(pathList.size() - 1);
            trainStack.push(peek);
        }
    }
}

时间复杂度:O(n!)

你可能感兴趣的:(华为机试,华为,栈)