题目:
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]
.
可以用带递归的回溯的方法来求解。
由于固定的数字做不同的组合,我们在一个for循环里面进行递归,即每个递归里面都有for循环,但是递归越深,for循环次数越少。
且在递归之前先进性交换,从而形成不同的组合。
当循环次数为1时,将交换后的nums写入到结果里面。
每次递归调用后,需要将数组交换回来,从而形成回溯。
实现如下:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
int size=nums.size();
vector<vector<int>> result;
back(0,size,result,nums);
return result;
}
void back(int index,int size,vector<vector<int>> &result,vector<int>& nums)
{
if(index>=size)
{
result.push_back(nums);
return;
}
for(int i=index;i<size;i++)
{
swap(nums[i],nums[index]);
back(index+1,size,result,nums);
swap(nums[i],nums[index]);
}
}
};