题解 | #没有重复项数字的全排列#
没有重复项数字的全排列
https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1
import java.util.*;
public class Solution {
private ArrayList<ArrayList<Integer>> res = new ArrayList<>(new ArrayList<>());
/**
* 全排列
* @param n 生成 1 - n 的全排列
* @return 1 - n 的全排列
*/
public ArrayList<ArrayList<Integer>> permute(int[] num) {
// 存一种排列
LinkedList<Integer> list = new LinkedList<>();
// 递归进行
backTrack(num, list);
return res;
}
private void backTrack(int[] num, LinkedList<Integer> list) {
int len = num.length;
if (len == list.size()) {
res.add(new ArrayList<>(list));
return;
}
for (int j : num) {
// true 表示该元素已经被添加过
if (list.contains(j))
continue;
// 否则可以作为一种选择
list.add(j);
// 递归,继续往下找
backTrack(num, list);
// 回溯——恢复上一级的元素
list.removeLast(); // 删除递归前加入的那个元素
}
}
}
做个笔记
查看7道真题和解析