CODE 86: Permutations II

来源:互联网 发布:程序员平均薪资 编辑:程序博客网 时间:2024/05/01 22:41

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 ArrayList<ArrayList<Integer>> permute(int[] num) {// Note: The Solution object is instantiated only once and is reused by// each test case.ArrayList<Integer> numbers = new ArrayList<Integer>();for (int n : num) {numbers.add(n);}ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>(dfs(numbers));return results;}Set<ArrayList<Integer>> dfs(ArrayList<Integer> numbers) {if (numbers.size() <= 1) {Set<ArrayList<Integer>> results = new HashSet<ArrayList<Integer>>();ArrayList<Integer> result = new ArrayList<Integer>(numbers);results.add(result);return results;}Set<ArrayList<Integer>> results = new HashSet<ArrayList<Integer>>();ArrayList<Integer> newNumbers = new ArrayList<Integer>(numbers);for (int i = 0; i < numbers.size(); i++) {Integer number = numbers.get(i);newNumbers.remove(number);Set<ArrayList<Integer>> res = dfs(newNumbers);for (ArrayList<Integer> re : res) {re.add(0, number);results.add(re);}newNumbers.add(number);}return results;}