class Solution {
private:
vector<vector<int> > res;
map<vector<int>, int> mp;
public:
vector<vector<int> > permuteUnique(vector<int> &num)
{
// Start typing your C/C++ solution below
// DO NOT write int main() function
res.clear();
mp.clear();
permute(num, 0, num.size());
return res;
}
void permute(vector<int> buf, int idx, int num)
{
if (idx == num)
{
if (mp.find(buf) == mp.end())
{
res.push_back(buf);
mp[buf] = 1;
}
}
for (int i = idx; i < num; ++i)
{
swap(buf[idx], buf[i]);
permute(buf, idx + 1, num);
swap(buf[idx], buf[i]);
}
}
void swap(int& a, int& b)
{
if (a == b)
return;
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
};