class Solution {
public:
vector<vector<int> > ret;
vector<int> sln;
unordered_map<int, int> map;
void DFS(int n) {
if (n == 0) {
ret.push_back(sln);
return;
}
for (unordered_map<int, int>::iterator iter = map.begin(); iter != map.end(); iter++) {
if (iter->second == 0) continue;
sln.push_back(iter->first);
iter->second--;
DFS(n - 1);
iter->second++;
sln.pop_back();
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ret.clear();
sln.clear();
map.clear();
for (int i = 0; i < num.size(); i++)
map[num[i]]++;
DFS(num.size());
return ret;
}
};
Small Case: 4ms
Large Case: 148ms