Permutations
Given a collection of distinct 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], [3,2,1] ]
解题技巧:
用递归DFS求解,采用flag数组标记某个元素是否访问过,在DFS递归函数中的循环从头开始。
代码:
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
vector< vector<int> > res;
bool *flag;
void dfs(vector<int>& nums, vector<int> res0)
{
int len = nums.size();
if(res0.size() == len )
{
res.push_back(res0);
return;
}
for(int i = 0; i < len; i ++)
{
if(flag[i] == true) continue;
flag[i] = true;
res0.push_back(nums[i]);
dfs(nums, res0);
res0.pop_back();
flag[i] = false;
}
}
vector< vector<int> > permute(vector<int>& nums)
{
vector<int> res0;
flag = new bool [nums.size()];
for(int i = 0; i < nums.size(); i ++)
{
flag[i] = false;
}
dfs(nums, res0);
return res;
}
int main()
{
int num;
vector<int> nums;
while(cin>>num)
{
nums.push_back(num);
}
res = permute(nums);
for(int i = 0 ; i < res.size(); i ++)
{
for(int j = 0; j < res[i].size(); j ++)
{
cout<<res[i][j]<<' ';
}
cout<<endl;
}
}