题目:
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].
Solution:
直接运用nextPermutation的思想。nextPermutation,按照字典序排序的,字符串的下一个字典序全排列。
class Solution {
public:
void nextPermutation(vector<int>& nums)
{
int N = nums.size();
int i = N - 1;
while(i > 0 && (nums[i-1] >= nums[i]))
i--;
int j = i;
while( j < N && i != 0 && nums[j] >nums[i-1])
j++;
if(i == 0)
reverse(nums.begin(),nums.end());
else
{
swap(nums[i-1],nums[j-1]);
reverse(nums.begin()+i,nums.end());
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ret;
vector<int> temp = nums;
ret.push_back(temp);
nextPermutation(temp);
while(temp != nums)
{
ret.push_back(temp);
nextPermutation(temp);
}
return ret;
}
};