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是一样的,使用递归、类DFS的方法求解
class Solution {
public:
void permute(vector<vector<int> >&result, vector<int>combination, vector<int>candidates, int index2remove){
//combination——当前已生成的组合
//candidates——候选数字集合
//index2remove——添加到combination的下一个数字在candidates中的索引位
combination.push_back(candidates[index2remove]);
candidates.erase(candidates.begin()+index2remove);
if(candidates.empty()){
result.push_back(combination);
}
else{
for(int i=0; i<candidates.size(); i++){
if(i!=0 && candidates[i]==candidates[i-1])continue; //去重
permute(result, combination, candidates, i);
}
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
vector<vector<int> >result;
int size=num.size();
if(size==0)return result;
sort(num.begin(), num.end()); //先排序,便于排重
vector<int>combination;
for(int i=0; i<size; i++){
if(i!=0 && num[i]==num[i-1])continue; //去重
permute(result, combination, num, i);
}
return result;
}
};LeetCode: Permutations II [046],布布扣,bubuko.com
LeetCode: Permutations II [046]
原文:http://blog.csdn.net/harryhuang1990/article/details/26562587