题解 | #没有重复项数字的全排列#
没有重复项数字的全排列
https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1
import java.util.ArrayList; import java.util.List; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> permute(int[] num) { // 结果集 ArrayList<ArrayList<Integer>> res = new ArrayList<>(); // 当前排列 ArrayList<Integer> s = new ArrayList<>(); // 调用回溯方法 backTrack(res, s, num, 0); return res; } // 定义回溯函数 public void backTrack(ArrayList<ArrayList<Integer>> res, ArrayList<Integer> s, int[] num, int indexBegin) { // 如果当前排列长度等于原数组长度,说明已形成一个完整排列 if (s.size() == num.length) { res.add(new ArrayList<>(s)); // 注意这里需要创建一个新的ArrayList,因为ArrayList是引用类型 return; } // 遍历数组中的每个元素 for (int i = 0; i < num.length; i++) { // 如果当前元素已在s中,则跳过 if (s.contains(num[i])) { continue; } // 添加元素到当前排列 s.add(num[i]); // 递归调用,进行下一层的排列 backTrack(res, s, num, i); // 回溯,移除最后一个元素,尝试下一个可能的元素 s.remove(s.size() - 1); } } }