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] ]
思路:递归
选出第一个数,将余下的数进行递归,终结条件就是没有余下的数。比如,将1取出,余下2和3,将2和3进行递归,直至余下为空。
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int> > ret;
void helper(vector<int>& nums,int index,vector<int>& tmp)
{
if(nums.size()==0)
{
ret.push_back(tmp);
return ;
}
for(int i=index;i<nums.size();i++)
{
tmp.push_back(nums[i]);
vector<int> num_copy(nums);
num_copy.erase(num_copy.begin()+i);
helper(num_copy,0,tmp);
tmp.pop_back();
}
}
vector<vector<int> > permute(vector<int>& nums)
{
if(nums.size()==0)
return ret;
vector<int> tmp;
helper(nums,0,tmp);
return ret;
}
};
int main()
{
int n;
cin>>n;
vector<int> nums;
vector<vector<int> > result;
for(int i=0; i<n; i++)
{
int r;
cin>>r;
nums.push_back(r);
}
Solution s;
result=s.permute(nums);
for(int i=0; i<result.size(); i++)
{
for(int j=0; j<result[i].size(); j++)
{
cout<<result[i][j]<<" ";
}
cout<<endl;
}
return 0;
}