剑指offer 66题 -- 字符串的排列
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> result;
if(str.size()<=0)
return result;
int start = 0;
permute( str, start, result);
sort( result.begin(), result.end() );
return result;
}
//采用传引用的方式,处理递归过程中的结果输出
void permute( string str, int start, vector<string> &result)
{
//采用递归方式处理字符串,将第一个字符和每个字符交换位置
//然后再处理每一个除了头字符的字符串, 就这样递归处理
//当已经到了最后一个字符时候,需要将字符串填入vector,递归收尾
if(start == str.size()-1)
{
result.push_back( str );
return;
}
for(int j=start; j<str.size(); ++j)
{
if(j!=start && str[j]==str[start])
continue;
swap(str[start], str[j]);
//每次交换后,就开始处理子字符串
permute(str, start+1, result);
swap(str[start], str[j]);
}
return ;
}
};