java 算法求助
这是我的代码
#华为OD招聘##java工程师##Java#import java.util.*; public class Main{ static List<String> l = new ArrayList<>(); //储存结果 public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { l.clear(); //静态变量,每次先清空 int nums = in.nextInt(); int[] id = new int[nums]; Stack<Integer> stack = new Stack<>(); for (int i = 0; i < nums; i++) { id[i] = in.nextInt(); } trainOut(id, 0, stack, "", 0); //对结果集排序 Collections.sort(l); for (String str : l) { System.out.println(str); } } in.close(); } //i为入栈次数,n为出栈次数,str存储一趟结果 public static void trainOut(int[] id, int i, Stack<Integer> s, String str, int n) { if (n == id.length) { l.add(str); //如果所有火车均出栈则将当前结果保存 } if (i < id.length) { s.push(id[i]); trainOut(id, i + 1, s, str, n); s.pop(); //恢复现场 } if (!s.empty()) { //栈非空时出栈 int temp = s.pop(); trainOut(id, i, s, str + temp + " ", n + 1); s.push(temp); //恢复现场 } } }这里的代码恢复现场是什么意思?完全看不懂,我知道这是回溯法,只改变一个元素有用吗?