leetcode:暴力枚举法之Permutations
题目:
Given a collection of numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1],[3,1,2], and [3,2,1].
即,全排列问题。
c++实现:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//void dfs(const vector<int>& num, vector<int> &path,vector<vector<int> > &result);
//递归
//vector<vector<int> > permute(vector<int>& num)
//{
// sort(num.begin(), num.end());
// vector<vector<int>> result;
// vector<int> path; // 中间结果
// dfs(num, path, result);
// return result;
//}
//void dfs(const vector<int>& num, vector<int> &path,vector<vector<int> > &result)
//{
// if (path.size() == num.size()) // 收敛条件
// {
// result.push_back(path);
// return;
// }
// // 扩展状态
// for (auto i : num)
// {
// // 查找i 是否在path 中出现过
// auto pos = find(path.begin(), path.end(), i);
// if (pos == path.end())
// {
// path.push_back(i);
// dfs(num, path, result);
// path.pop_back();
// }
// }
//}
//利用next_permutation()函数
vector<vector<int>> permute(vector<int>& num)
{
sort(num.begin(), num.end());
vector<vector<int>> permutations;
do {
permutations.push_back(num);
} while (next_permutation(num.begin(), num.end()));
return permutations;
}
int main()
{
int a[3]={1,2,3};
vector<int>vec(a,a+3);
vector<vector<int>> out;
out= permute(vec);
vector<vector<int>>::iterator pp;
vector<int>::iterator it;
for(pp=out.begin();pp<out.end();pp++)
{
for (it=(*pp).begin();it<(*pp).end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
return 0;
}
测试结果: