数组全排列
1. 交换某一个数组中的某一位与后面的某一位,固定该位后,让该位后面的进行全排列
2. 回溯将交换的两位换回来,将最开始的状态进行全排列
void perm(vector<vector<int>> &res,vector<int>& nums,int begin,int end)
{
if(begin==end)//结束条件
{
res.push_back(nums);
return;
}
int i;
for(i=begin;i<end;i++)//路径选择
{
swap(nums[i],nums[begin]);//交换第一位与后面某一位
perm(res,nums,begin+1,end);//第一位的后面进行全排列
swap(nums[i],nums[begin]);//恢复原状
}
//或者i=begin+1 后面进行单独全排列 perm(res,nums,begin+1,end)
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
perm(res,nums,0,nums.size());
return res;
}