//把数组分为两部分
//一部分为已排列,另一部分为未排列
//将未排列部分元素插入已排列部分
//回溯,找出所有可能的答案
//……
void backtrace(vector<vector<int>>& ans,vector<int>& vec,int first, int len)
{
if(first==len)
{
ans.push_back(vec);
return;
}
for(int i=first;i<len;i++)
{
swap(vec[i],vec[first]);//动态维护数组
backtrace(ans,vec,first+1,len);//继续递归填下一个数
swap(vec[i],vec[first]);//撤销操作,进行回溯
}
}
vector<vector<int>> permute(vector<int>& nums)
{
vector<vector<int>> ans;
backtrace(ans,nums,0,nums.size());
return ans;
}
C++实现全排列
最新推荐文章于 2024-04-24 08:56:01 发布