给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
vector<int> getnext(vector<int> nums)
{
int size = nums.size();
int i = 0;
int j = -1;
int k = -1;
for(i=size-1; i>0; i--)
{
if(nums[i]>nums[i-1])
{
j=i-1;
break;
}
}
if(j == -1)
{
return nums;
}
for(i=size-1; i>=0; i--)
{
if(nums[i]>nums[j])
{
k=i;
break;
}
}
int tmp = nums[j];
nums[j] = nums[k];
nums[k] = tmp;
for(i=size-1, j=j+1; j<i; i--,j++)
{
int tmp1 = nums[j];
nums[j] = nums[i];
nums[i] = tmp1;
}
return nums;
}
vector<vector<int>> permuteUnique(vector<int>& nums)
{
vector<vector<int>> ret;
vector<int> tmp = nums ;
if(tmp.size() == 0)
{
return ret;
}
sort(tmp.begin(), tmp.end());
ret.push_back(tmp);
vector<int> pre = tmp;
while(1)
{
tmp = getnext(tmp);
if(tmp == pre)
{
break;
}
pre = tmp;
ret.push_back(tmp);
}
return ret;
}
};