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; } 测试结果: