题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static Stack<Integer> stack = new Stack();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
List<String> list= new ArrayList();
stack.clear();
int a = in.nextInt();
List chs=new ArrayList();
for(int i=0;i<a;i++){
chs.add(in.nextInt());
}
out(list,0,0,chs,chs.size(),"");
Collections.sort(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
//sum是出栈数,i是数组下标,即轮到哪列车进站,chs列车数组,list字符串数组(可能性集合),length列车数
public static void out(List list,int i,int sum,List chs,int length,String ls){
//所有车出站(边界条件)
if(sum==length){
list.add(ls);
return;
}
//入站假设
if(i<length){
stack.push((Integer)chs.get(i));
out(list,i+1,sum,chs,length,ls);
stack.pop();
}
//出站
if(!stack.empty()){
int k=stack.pop();
out(list,i,sum+1,chs,length,ls+k+" ");
stack.push(k);
}
}
}