面试题28.字符串的排列

时间:2023-01-04 14:37:55

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,

则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba.

 

此题的主要步骤由如下几步:

1.求出所有可能出现在第一个位置的字符

2.将第一个字符与后面字符分别交换

3.将第一个字符后面的字符递归步骤1,2

 

代码如下:

 1 #include <iostream>
2 using namespace std;
3
4 void FunOfString(char* Str,char* Begin)
5 {
6 if(!Str||!Begin)
7 {
8 return;
9 }
10
11 if(*Begin=='\0')
12 {
13 cout<<Str<<endl;
14 }
15 else
16 {
17 for(char* ch=Begin;*ch!='\0';ch++)
18 {
19 char temp;
20 temp=*ch;
21 *ch=*Begin;
22 *Begin=temp;
23
24 FunOfString(Str,Begin+1);
25
26 temp=*ch;
27 *ch=*Begin;
28 *Begin=temp;
29 }
30 }
31 }
32
33 int main()
34 {
35 char Str[]="vpoet";
36 FunOfString(Str,Str);
37 system("pause");
38 return 0;
39 }

运行截图:

面试题28.字符串的排列