https://oj.leetcode.com/problems/permutations-ii/
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) {
vector<vector<int> > resultVec;
resultVec.push_back(num);
permuteUnique(0, resultVec, num);
return resultVec;
}
private:
void permuteUnique(size_t position, vector<vector<int>> &resultVec, vector<int> &num) {
for (size_t i = position; i < num.size(); i++) {
if (haveSamePermutationBefore(num, position, i)) {
if (i != position) {
swap(num[position], num[i]);
resultVec.push_back(num);
}
permuteUnique(position + 1, resultVec, num);
if (i != position) {
swap(num[position], num[i]);
}
}
}
}
bool haveSamePermutationBefore(vector<int> &num, size_t begin, size_t end) {
for (size_t i = begin; i < end; i++) {
if (num[i] == num[end]) {
return false;
}
}
return true;
}
};