Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
Solution:
It is a dfs transformation question.
[1,1,2] have the following unique permutations:[1,1,2], [1,2,1], and [2,1,1].Solution:
It is a dfs transformation question.
public class Solution {
public ArrayList> permuteUnique(int[] num) {
Arrays.sort(num);
ArrayList> result = new ArrayList>();
ArrayList subset = new ArrayList();
Boolean[] visited = new Boolean[num.length];
// must!!!!!! default value is null
Arrays.fill(visited, Boolean.FALSE);
dfs(num, result, subset, visited);
return result;
}
public void dfs(int[] num, ArrayList> result, ArrayList subset, Boolean[] visited){
if(subset.size() == num.length){
result.add(new ArrayList(subset));
return;
}
for(int i = 0; i < num.length; i++){
// if two elements have same value, the previous one must be visited first
if(visited[i] || (i > 0 && num[i] == num[i-1] && !visited[i-1]))
continue;
visited[i] = true;
subset.add(num[i]);
dfs(num, result, subset, visited);
subset.remove(subset.size()-1);
visited[i] = false;
}
}
}

No comments:
Post a Comment