Permutations II
2014-12-22 18:42 李涛的技术博客 阅读(172) 评论(0) 编辑 收藏 举报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].
vector<vector<int> >& permute(vector<int> vecInt) { vector<int> vecWorker; vector<vector<int> > vecPermu; vector<int> vecVisit(vecInt.size()); sort(vecInt.begin(), vecInt.end()); helper(vecPermu, vecWorker, vecInt, vecVisit); return vecPermu; } void helper(vector<vector<int> >& vecPermu, vector<int>& vecWorker, const vector<int>& vecInt, vector<int>& vecVisit) { if (vecWorker.size() == vecInt.size()) { vecPermu.push_back(vecWorker); return; } for (int i = 0; i < vecInt.size(); i++) { if (vecVisit[i] == 1 || (i != 0 && vecInt[i] == vecInt[i-1] && vecVisit[i-1] == 0)) { continue; } vecVisit[i] = 1; vecWorker.push_back(vecInt[i]; helper(vecPermu, vecWorker, vecInt); vecWorker.pop_back(vecInt[i]); vecVisit[i] = 0; } }