Permutations II (Java)

来源:互联网 发布:sublime 运行python 编辑:程序博客网 时间:2024/05/16 17:15

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].

比Permutations那道题就多了一个HashSet判断contains。 下次写注意一下其他写法,比如不用contains试试。

Source

public class Solution { public List<List<Integer>> permuteUnique(int[] num) {    List<List<Integer>> st = new ArrayList<List<Integer>>();    List<Integer> a = new ArrayList<Integer>();    if(num.length == 0) return st;        Arrays.sort(num);    boolean[] visited = new boolean[num.length];    HashSet<List<Integer>> hs = new HashSet<List<Integer>>();    searchNum(num, st, a, visited, hs);    return st;    }    public void searchNum(int[] num, List<List<Integer>> st, List<Integer> a, boolean[] visited, HashSet<List<Integer>> hs){    if(a.size() == num.length){    if(!hs.contains(a)){    st.add(new ArrayList<Integer>(a)); //注意递归时的st添加要为a新分配空间    hs.add(a);    }         return;    }        for(int i = 0; i < num.length; i++){    if(!visited[i]){    a.add(num[i]);    visited[i] = true;    searchNum(num, st, a, visited, hs);    a.remove(a.size() - 1);   //remove***    visited[i] = false;    }    }    }}


Test

    public static void main(String[] args){    int[] num = {-1, -1, -1, 3};    System.out.println(new Solution().permuteUnique(num));         }


0 0
原创粉丝点击