import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { static List<String> ll = new ArrayList<>(); public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case ll.clear(); int n = in.nextInt(); int[] train = new int[n]; for (int i = 0; i < n; i++) { train[i] = in.nextInt(); } Stack<Integer> stack = new Stack<>(); function(train, 0, 0, stack, ""); // 对结果集排序 Collections.sort(ll); for (String str : ll) { System.out.println(str); } } } // i 为入栈次数, j 为出栈次数 Str 记录出栈顺序 public static void function(int[] train, int i, int j, Stack<Integer> stack, String str) { if (j == train.length) { ll.add(str); } if (!stack.isEmpty()) { int temp = stack.pop(); function(train, i, j + 1, stack, str + temp + " "); // 出栈拼接字符串 stack.push(temp);// 恢复现场 } if (i < train.length) { stack.push(train[i]); function(train, i + 1, j, stack, str); stack.pop();// 恢复现场 } } }