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], [2,1,1] ]
方法:与Permutations I代码一样即可通过
class Solution { private: void next(vector<int> & now){ int start = -1; for(int i = now.size() - 2; i >= 0 ; --i){ if(now[i]<now[i+1]){ start = i; break; } } if(start ==-1) sort(now.begin(),now.end()); else{ for(int j = now.size() - 1; j > start ; --j){ if(now[j] > now[start]){ swap(now[j],now[start]); break; } } reverse(now.begin() + start + 1,now.end()); } } public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> res; vector<int> buffer(nums.begin(),nums.end()); res.push_back(buffer); next(buffer); while(buffer != nums){ res.push_back(buffer); next(buffer); } return res; } };