题解 | #火车进站#
火车进站
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); } } }