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:
vector<vector<int> > permuteUnique(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
n = num.size();
nums = #
record = vector<int>(n, 1);
filter.clear();
result.clear();
if (n < 1) {
return result;
}
backTrace(0);
return result;
}
void backTrace(int i) {
if (i >= n) {
if (filter.find(got) == filter.end()) {
result.push_back(got);
filter.insert(got);
}
return ;
}
for (int j = 0; j < n; ++j) {
if (record[j] == 1) {
record[j] = 0;
got.push_back((*nums)[j]);
backTrace(i+1);
record[j] = 1;
got.pop_back();
}
}
}
private:
int n;
vector<int>* nums;
vector<int> record;
vector<int> got;
vector<vector<int> > result;
set<vector<int> > filter;
};