问题
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串
abc、acb、bac、bca、cab 和 cba。
思路
假设要排列的字符为abc,那么由这些字符组成的排列可以使用以下方法:
- 首先固定首字母为a,那么只需要对余下字符bc进行排序即可,若再固定b那么得出的排列为abc,若固定字母c,则得出的排列为acb;
- 再固定字符b,那么只需要对字符ac进行排序即可,固定a,则得出排列bac,固定c则得出排列bca;
- 固定字符c,再对字符ab进行排列,固定a,则得出排列cab,固定b则得出排列cba;
由此可见,要求出排列,就需要使用递归的方法来进行:
void FullPermutation(char *str, int from, int to){
if(NULL == str || from<0 || to<1 || from>to)
return ;
if(from == to){
for(int i=0; i<=to; i++)
cout << str[i];
cout << endl;
} else {
for(int j=from; j<=to; j++){
cout<<"j="<<j<<" from="<<from