以下网址可以帮助大家透彻理解全排列算法:
https://www.bilibili.com/video/av9830088
class Solution {
public:
vector<string> Permutation(string str) {
//可以用递归来做
vector<string> array;
if(str.size()==0) return array;
int begin=0;
res(array,str,begin);
sort(array.begin(), array.end());
return array;
}
void res(vector<string> &array, string str, int begin)//遍历第begin位的所有可能性
{
if(begin==str.size()-1)//看begin是否是str的最后一个字符
array.push_back(str);
for(int i=begin; i<=str.size()-1;i++)
{
if(i!=begin && str[i]==str[begin])//有重复字符时,跳过
continue;
swap(str[i], str[begin]);//当i==begin时,也要遍历其后面的所有字符;
//当i!=begin时,先交换,使第begin位取到不同的可能字符,再遍历后面的字符
res(array, str, begin+1);//遍历其后面的所有字符;
swap(str[i], str[begin]);//将begin处的元素重新换回来
}
}
};