文章目录
排列
牛客BM55:没有重复项的全排列
- 递归参数
- 终止条件
- 单层循环
- 1)当前操作
- 2)回溯
- 3)终止条件返回后,恢复现场
注意:res在收集path时,要重新new一个ArrayList,否则path变化的时候,res里的数据也会变化
static ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
static ArrayList<Integer> path = new ArrayList<Integer>();
public static ArrayList<ArrayList<Integer>> permute(int[] num) {
res.clear();
boolean[] used = new boolean[num.length];
BackTracking(num, used);
return res;
}//permute
public static void BackTracking(int[] num, boolean[] used) {//1. 递归参数
//2. 终止条件
if(path.size() == num.length) {
res.add(new ArrayList<Integer>(path));
// res.add(path);/*不能这么写,否则,path变化的时候,res里的数据也会变化*/
return;
}
//3. 单层循环
for(int i = 0; i < num.length; i++) {
//当前操作
if(used[i]) continue;
used[i] = true;
path.add(num[i]);
//回溯
BackTracking(num, used);
//终止条件返回后--恢复现场
path.remove(path.size()-1);
used[i] = false;
}
}//BackTracking