给出一个具有重复数字的列表,找出列表所有不同的排列
样例
给出列表[1,2,2],不同的排列有:
[
[1,2,2],
[2,1,2],
[2,2,1]
]
class Solution {
public:
bool nextPermutation(vector<int> &nums) {
int n = nums.size();
for(int i=n-1;i>=0;i--){
for(int j=n-1;j>i;j--){
if(nums[i]<nums[j]){
swap(nums[i],nums[j]);
sort(nums.begin()+i+1,nums.end());
return true;
}
}
}
sort(nums.begin(),nums.end());
return false;
}
vector<vector<int> > permuteUnique(vector<int> &nums) {
vector<vector<int> > ret;
sort(nums.begin(),nums.end());
do{
ret.push_back(nums);
}while(nextPermutation(nums));
return ret;
}
};