只能通过【1,2】数组,来理解,整个过程,mark[i]在每一次,寻找到一个排列时,都是全部为true的,调试的结果。
如果是三个数组,也是一样道理的。
import java.util.*; public class Solution { Boolean[] mark; ArrayList<ArrayList<Integer>> res = new ArrayList<>(); /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> permuteUnique (int[] num) { if(num==null) return res; LinkedList<Integer> output = new LinkedList<>(); Arrays.sort(num); mark = new Boolean[num.length]; Arrays.fill(mark, false); backtrack(output, num); return res; } public void backtrack(LinkedList<Integer> output, int[] num) { if(num.length == output.size()) { res.add(new ArrayList<Integer>(output)); return; } for(int i=0; i<num.length; i++) { if(mark[i] || (i>0 && num[i]==num[i-1] && !mark[i-1])) { continue; } mark[i] = true; output.add(num[i]); backtrack(output, num); output.removeLast(); mark[i] = false; } } }