题解 | #没有重复项数字的全排列#
没有重复项数字的全排列
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(); // 删除递归前加入的那个元素 } } }
做个笔记