5/30/2014

36. Permutations II

public class Solution {
    public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>> ();
        ArrayList<Integer> temp = new ArrayList<Integer> ();
       
        Arrays.sort(num);
       
        int len = num.length;
        int[] used = new int[len];
       
        getpermute(num, temp, len, used, res);
        return res;
    }
   
    public void getpermute(int[] num, ArrayList<Integer> temp, int len, int[] used, ArrayList<ArrayList<Integer>> res) {
        if (temp.size()==len) {
            res.add((ArrayList<Integer>) temp.clone());
            return;
        }
       
        for (int i=0; i<len; i++) {
            if (used[i]==0) {
                temp.add(num[i]);
                used[i] = 1;
                getpermute(num, temp, len, used, res);
                used[i] = 0;
                temp.remove(temp.size()-1);
               
                while(i<len-1 && num[i]==num[i+1]) {
                    i++;
                }
            }
        }
    }
}

没有评论:

发表评论