首页 > 代码库 > LeetCode: Permutations II [046]
LeetCode: Permutations II [046]
【题目】
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; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。