只能通过【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;
        }
    }
}