标签:style blog io ar color os sp for on
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]
.
1 public class Solution { 2 public List<List<Integer>> permuteUnique(int[] num) { 3 boolean[] used = new boolean[num.length]; 4 Arrays.fill(used,false); 5 Arrays.sort(num); 6 List<List<Integer>> resSet = new ArrayList<List<Integer>>(); 7 List<Integer> curStr = new ArrayList<Integer>(); 8 permuteRecur(num,used,0,curStr,resSet); 9 return resSet; 10 } 11 12 public void permuteRecur(int[] num, boolean[] used, int cur, List<Integer> curStr, List<List<Integer>> resSet){ 13 if (cur==num.length){ 14 List<Integer> res = new ArrayList<Integer>(); 15 res.addAll(curStr); 16 resSet.add(res); 17 return; 18 } 19 20 boolean init = true; 21 int lastVal = -1; 22 for (int i=0;i<num.length;i++) 23 if (used[i] || (!init && num[i]==lastVal)) 24 continue; 25 else { 26 init = false; 27 curStr.add(num[i]); 28 used[i]=true; 29 permuteRecur(num,used,cur+1,curStr,resSet); 30 used[i]=false; 31 curStr.remove(curStr.size()-1); 32 lastVal = num[i]; 33 } 34 } 35 }
标签:style blog io ar color os sp for on
原文地址:http://www.cnblogs.com/lishiblog/p/4110294.html