题目描述:
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] ]找出给出数组的全排列,同样还是采用递归的方法来解决,每次递归从已有数组选择一个元素加入当前结果,并将其从已有数组中删除,避免重复。当当前结果元素个数等于最初的数组长度,说明所有的元素都已加入到当前结果中,递归结束。递归传递的参数包括当前的排列结果、已有的数组和所有的排列结果。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
int n=nums.size();
vector<vector<int> > result;
vector<int> cur;
permute_add(result,cur,nums,n);
return result;
}
void permute_add(vector<vector<int> >& result,vector<int> cur,vector<int> nums,int n)
{
for(int i=0;i<nums.size();i++)
{
vector<int> curTemp=cur;
curTemp.push_back(nums[i]);
if(curTemp.size()==n)
{
result.push_back(curTemp);
}
else
{
vector<int> numsTemp=nums;
numsTemp.erase(numsTemp.begin()+i);
permute_add(result,curTemp,numsTemp,n);
}
}
}
};