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]
.
利用了 Next Permutation 的函数方法。
class Solution {
public:
vector<vector<int> > permuteUnique(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > result;
sort(num.begin(),num.end());
result.push_back(num);
while(nextPermutation(num))
{
result.push_back(num);
}
return result;
}
bool nextPermutation(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int previous = -1;
int current = -1;
for(int i=0;i<num.size()-1;i++)
{
if(num[i]<num[i+1])
{
previous = i;
}
}
if(previous!=-1)
{
for(int j=previous;j<num.size();j++)
{
if(num[previous]<num[j])
{
current = j;
}
}
swap(num[previous],num[current]);
sort(num.begin()+previous+1,num.end());
return true;
}
else
{
return false;//代表已经没有更多的排列了
}
}
};