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].
1 class Solution { 2 public: 3 vector<vector<int> > res; 4 5 void permuteUnique(vector<int> &num, vector<int> &per, vector<bool> &isAvail) 6 { 7 if(per.size() == num.size()) { 8 res.push_back(per); 9 } 10 int last_index = -1; // save arranged element 11 for(int i = 0; i < num.size(); i++) { 12 if(isAvail[i]) { 13 if(last_index != -1 && num[i] == num[last]) continue; 14 isAvail[i] = false; 15 per.push_back(num[i]); 16 permuteUnique(num, per, isAvail); 17 per.pop_back(); 18 isAvail[i] = true; 19 last_index = i; 20 } 21 } 22 } 23 24 vector<vector<int> > permuteUnique(vector<int> &num) { 25 sort(num.begin(), num.end()); 26 vector<int> per; 27 vector<bool> avail(num.size(), true); 28 permuteUnique(num, per, avail); 29 return res; 30 } 31 };
Permutations II,布布扣,bubuko.com
原文:http://www.cnblogs.com/zhengjiankang/p/3646337.html