解题思路:
求解整个字符串的排列步骤:
1、求得所有可能出现在第一个位置上的字符,将第一个位子上的字符与后面的交换
2、固定第一个字符,求后面字符的排列,就涉及递归的问题了
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> result; //创建字符串数组
int len = str.length(); //求出字符串长度,作为参数传递控制循环次数
if(!len) return result; //当输入为空时,直接返回
Permutations(result, str, 0, len);
return result;
}
//递归函数
void Permutations(vector<string>&result, string str,int index, int len){
//当索引指向字符串尾部时,将str压入数组
if (index == len){
result.push_back(str);
return;
}
for (int i = index; i < len; ++i) {
if (i!=index && str[i]== str[index]) continue;// 保证当输入多个重复字符时,不会重复计算
swap(str[i],str[index]);//每一次,交换从第index位以后的一个元素
Permutations(result, str, index+1, len);
}
}
};