标签:style class blog code java http
给的一个数列中,可能存在重复的数,比如 1 1 2 ,求其全排列。
记录上一个得出来的排列,看这个排列和上一个是否相同。
#include <iostream> #include <vector> #include <algorithm> using namespace std; class Solution{ public: vector<vector<int> > permuteUnique(vector<int> &num) { vector<vector<int> > ans; if(num.size()==0) return ans; vector<int> _num = num; sort(_num.begin(),_num.end()); vector<int> _beforeOne = _num; ans.push_back(_num); while(nextPermutation(_num)) { if(_num != _beforeOne) { ans.push_back(_num); _beforeOne = _num; } } return ans; } private: bool nextPermutation(vector<int> &num) { return next_permutation(num.begin(),num.end()); } template<typename BidiIt> bool next_permutation(BidiIt first,BidiIt last) { const auto rfirst = reverse_iterator<BidiIt>(last); const auto rlast = reverse_iterator<BidiIt>(first); auto pivot = next(rfirst); while(pivot != rlast && *pivot >= *prev(pivot)) { ++pivot; } //this is the last permute, or the next is the same as the begin one if(pivot == rlast) { reverse(rfirst,rlast); return false; } //find the first num great than pivot auto change = rfirst; while(*change<=*pivot) ++change; swap(*change,*pivot); reverse(rfirst,pivot); return true; } }; int main() { vector<int> num; num.push_back(1); num.push_back(1); num.push_back(2); Solution myS; myS.permute(num); return 0; }
LeetCode OJ--Permutations II,布布扣,bubuko.com
标签:style class blog code java http
原文地址:http://www.cnblogs.com/qingcheng/p/3784567.html