题目:
题解:
递归。
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<String> list = new ArrayList(n);
String[] strings = in.nextLine().split(" ");
for(String s : strings) {
list.add(s);
}
List<String> 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<String> resultList, List<String> pathList,
Stack<String> trainStack, List<String> 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!)