题解 | #有重复项数字的所有排列#
有重复项数字的所有排列
http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863
全排列方法: 第一种:库函数方法:使用next_permutation; sort(num.begin(), num.end()); vector<vector > res; // while(next_permutation(num.begin(), num.end())){ // res.push_back(num); // } return res; 方法2 :递归方法 使用set去重: class Solution { public: vector<vector > permuteUnique(vector &num) { sort(num.begin(), num.end()); vector<vector > res; set<vector> st; ** dfs(st,num,0);** for(auto vec:st) res.push_back(vec); return res; } void dfs(set<vector> &st, vector &num, int idex) { if (idex == num.size()-1) { st.insert(num); return; } for (int i = idex; i< num.size();++i) { if (i != idex && num[i] == num[idex]) continue; ** swap(num[i],num[idex]); dfs(st,num,idex+1); swap(num[i],num[idex]);** } }
};