题解 | #火车进站#
火车进站
https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) {
int num = in.nextInt();
List<String> orders = new ArrayList<>();
int[] trains = new int[num];
for(int i=0 ; i<num ; ++i){
trains[i] = in.nextInt();
}
dfs(orders, "", new Stack<Integer>(), trains, 0, 0);
Collections.sort(orders);
for(String order : orders){
System.out.println(order);
}
}
}
public static void dfs(List<String> orders, String str,
Stack<Integer> stack, int[] trains, int pushNum, int popNum) {
if(popNum == trains.length){
orders.add(str);
}
if(pushNum < trains.length){ //如果栈没满,就先进栈,如果已经全部进栈了,则开启出栈模式
stack.push(trains[pushNum]);
dfs(orders, str, stack, trains, pushNum+1, popNum);
stack.pop(); //恢复现场,恢复进栈前的状态
}
if(!stack.isEmpty()){ //如果当前栈有元素,则出去一个,然后再进栈和出栈,即中间进站的火车先出去,然后再执行后续的进站出站流程
int x = stack.pop();
dfs(orders, str+x+" ", stack, trains, pushNum, popNum+1);
stack.push(x); //恢复出栈前的状态
}
}
}
查看6道真题和解析