首页 > 代码库 > Permutations II
Permutations II
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的思路,但是其中包含重复的排列组合。这就需要考虑在全排列中去掉重复的规则,也就是说去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。
class Solution { public: bool unique(vector<int> &num,int i,int index) { for(int j=index;j<i;j++) { if(num[j]==num[i]) return true; } return false; } void permute(vector<vector<int> > &result,vector<int> &num,int index) { if(index==num.size()) { result.push_back(num); } for(int i=index;i<num.size();i++) { if(unique(num,i,index)) continue; swap(num[i],num[index]); permute(result,num,index+1); swap(num[i],num[index]); } } vector<vector<int> > permuteUnique(vector<int> &num) { vector<vector<int> > result; result.clear(); permute(result,num,0); return result; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。