【题目】
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
时间: 2024-10-16 13:21:47