全排列问题:
(1)将字符串分为二部分,第一部分是字符串的第一个字符,第二部分是除第一个字符以外的其他字符;
(2) 将字符串的第一部分与第二部分的字符依次进行交换,逐个生成全排列;
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
permution(res,nums,0);
return res;
}
void permution(vector<vector<int>>& res,vector<int>& nums,int pos)
{
if(pos==nums.size()-1)
res.push_back(nums);
else
{
for(int i=pos;i<nums.size();i++)
{
int temp=nums[pos];
nums[pos]=nums[i];
nums[i]=temp; //change(nums[pos],nums[i]);
permution(res,nums,pos+1);
temp=nums[pos];
nums[pos]=nums[i];
nums[i]=temp; //回溯,change(nums[pos],nums[i]);
}
}
}
};
本文介绍了一种基于递归实现的全排列算法。该算法通过将字符串分为两部分,并不断交换字符位置来生成所有可能的全排列组合。适用于面试备考及算法初学者。
515

被折叠的 条评论
为什么被折叠?



