중복된 수가 포함될 수 있는 배열이 주어진다. 이 수로 만들수 있는 permutation의 모든 경우의 수를 구하라.
Input: nums = [1,1,2]
Output:
[[1,1,2],
[1,2,1],
[2,1,1]]
class Solution {
public:
vector<vector<int>> ret;
vector<int> tmp;
unordered_map<int, int> count;
void back_tracking(vector<int> nums, int size) {
if (size < 0)
return;
if (size == 0) {
ret.push_back(tmp);
return;
}
for (auto it: count) { // iterate hashtable ...!
if (it.second == 0)
continue;
count[it.first]--;
tmp.push_back(it.first);
back_tracking(nums, size - 1);
tmp.pop_back();
count[it.first]++;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
for (auto it: nums)
count[it]++;
back_tracking(nums, nums.size());
return ret;
}
};