8.4—暴力枚举法—Permutations II

来源:互联网 发布:linux下的下载工具 编辑:程序博客网 时间:2024/06/01 16:49
描述
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].

#include<iostream>#include<vector>#include<iomanip>#include<algorithm>using namespace std;vector<vector<int>> permutations;void swap(int &a, int &b){int temp = a;a = b;b = temp;}void Permutations(int a[], int from, int to){if (a == NULL)return;if (from == to){vector<int> path;for (int i = 0; i <= to; i++){path.push_back(a[i]);}permutations.push_back(path);}else{for (int i = from; i <= to; i++){swap(a[from], a[i]);Permutations(a, from + 1, to);swap(a[from], a[i]);}}}int main(){const int n = 3;int a[n] = { 1, 2, 1 };int from = 0;int to = n - 1;//===Permutations(a, from, to);sort(permutations.begin(), permutations.end());auto it = unique(permutations.begin(), permutations.end());permutations.resize(distance(permutations.begin(), it));//===for (int i = 0; i < permutations.size(); i++){for (int j = 0; j < permutations[i].size(); j++)cout << permutations[i][j] << " ";cout << endl;}}

原创粉丝点击