import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> permuteUnique (int[] num) { // write code here ArrayList<ArrayList<Integer>> res = new ArrayList<>(); Arrays.sort(num); dfs(res, num, new LinkedList<Integer>(), new boolean[num.length]); return res; } private void dfs(ArrayList<ArrayList<Integer>> res, int[]num, LinkedList<Integer> buffer, boolean[] isVisited) { if (buffer.size() == num.length) { ArrayList<Integer> temp = new ArrayList<>(); for (Integer number : buffer) { temp.add(number); } res.add(temp); } else { for (int i = 0; i < num.length; i++) { if (isVisited[i]) continue; //剪枝,如果前一个与当前数一样,且前一个没有使用,那这个数也不使用 if (i > 0 && num[i] == num[i - 1] && !isVisited[i - 1]) continue; isVisited[i] = true; buffer.add(num[i]); dfs(res, num, buffer, isVisited); isVisited[i] = false; buffer.removeLast(); } } } }