Permutations II

来源:互联网 发布:mac版电脑能下淘宝 编辑:程序博客网 时间:2024/06/05 03:20

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:
[1,1,2][1,2,1], and [2,1,1].

public class Solution {    public List<List<Integer>> permuteUnique(int[] num) {        List<List<Integer>> res=new ArrayList< List<Integer>>();        if(num==null) return res;        getPermute(res,num,0);        HashSet set=new HashSet(res);        res.clear();        res.addAll(set);        return res;    }    public void getPermute(List<List<Integer>> res,int[] num,int begin){        if(begin==num.length){            ArrayList<Integer> a=new ArrayList<Integer>();            for(int i=0;i<num.length;i++){                a.add(num[i]);            }            res.add(a);        }        for(int i=begin;i<num.length;i++){            if(i>begin && num[i]==num[begin]) continue;            swap(num,i,begin);            getPermute(res,num,begin+1);            swap(num,i,begin);        }    }    public void swap(int[] num,int a,int b){        int tmp=num[a];        num[a]=num[b];        num[b]=tmp;    }}
思路:先求出全部的,再删除重复的。

0 0
原创粉丝点击