一、问题描述
二、思路
全排列就是从第一个数字起每个数分别与它后面的数字交换。递归方法实现,每次向前移动一位,先交换,求出全排列后再交换回来,这样后面的顺序就不会变化。
三、代码
class Solution {
public:
void swap(int *p,int *q){
int temp = *p;
*p = *q;
*q = temp;
}
void AllRange(vector<int> &nums, int begin,int end, vector<vector<int>> &v){
if(begin == end){
v.push_back(nums);
}else{
for(int i = begin; i < end; ++i){
swap(&nums[begin], &nums[i]);
AllRange(nums, begin + 1, end, v);
swap(&nums[begin],&nums[i]);
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> v;
AllRange(nums,0,nums.size(),v);
return v;
}
};