先上题:
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]
.
class Solution {
public:
void dfs(vector<vector<int> >& result, vector<int>& tmp, vector<int>& num)
{
if (num.empty())
{
result.push_back(tmp);
return;
}
map<int, bool> mapping;
for (int i = 0; i < num.size(); i++)
{
mapping[num[i]] = false;
}
for (int i = 0; i < num.size(); i++)
{
if (mapping[num[i]] == false)
{
tmp.push_back(num[i]);
mapping[num[i]] = true;
auto iter = num.begin();
iter += i;
vector<int> tmpA = num;
num.erase(iter);
dfs(result, tmp, num);
num = tmpA;
tmp.pop_back();
}
}
}
vector<vector<int> > permuteUnique(vector<int> &num)
{
vector<vector<int> > result;
if (num.empty())
{
return result;
}
vector<int> tmp;
dfs(result, tmp, num);
return result;
}
};