100题_28 字符串的排列
时间:2011-03-16 来源:小橋流水
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
代码
1 /*
2 * File: main.cpp
3 * Author: ziqiao
4 *
5 * Created on 2011年3月16日, 下午2:00
6 */
7
8 #include <cstdlib>
9 #include <iostream>
10
11 using namespace std;
12
13 /**
14 * 交换两个字符串
15 * @param s1
16 * @param s2
17 */
18 void exchange(char *s1, char *s2)
19 {
20 char tmp = *s1;
21 *s1 = *s2;
22 *s2 = tmp;
23 }
24
25 /**
26 * 递归逻辑
27 * @param pstr
28 * @param pbegin
29 */
30 void display(char *pstr, char *pbegin)
31 {
32 if (!pstr || !pbegin)
33 return;
34 if (*pbegin == '\0')
35 cout<<pstr<<endl;
36 else
37 {
38 for (char *pch = pbegin; *pch != '\0'; pch ++)
39 {
40 exchange(pch, pbegin);
41 display(pstr, pbegin + 1);
42 exchange(pch, pbegin);
43 }
44 }
45 }
46
47 /**
48 * 打印出一个符的所有组合
49 * @param str
50 */
51 void display(char *str)
52 {
53 display(str, str);
54 }
55
56 /**
57 * 主函数,用于测试
58 * @param argc
59 * @param argv
60 * @return
61 */
62 int main(int argc, char** argv)
63 {
64 char s[] = "abc";
65 display(s);
66 return 0;
67 }
这题主要考察的是我们对递归的理解。对于三个字符a, b, c的情况,我们先固定a,剩余的b,c做全排列,然后固定b(将a与b交换),a,c做全排列,最后固定c(c与a交换),a,b做全排列。知道了三个的情况,对于更高的情况,我们递归就好了。
下面是代码:

2 * File: main.cpp
3 * Author: ziqiao
4 *
5 * Created on 2011年3月16日, 下午2:00
6 */
7
8 #include <cstdlib>
9 #include <iostream>
10
11 using namespace std;
12
13 /**
14 * 交换两个字符串
15 * @param s1
16 * @param s2
17 */
18 void exchange(char *s1, char *s2)
19 {
20 char tmp = *s1;
21 *s1 = *s2;
22 *s2 = tmp;
23 }
24
25 /**
26 * 递归逻辑
27 * @param pstr
28 * @param pbegin
29 */
30 void display(char *pstr, char *pbegin)
31 {
32 if (!pstr || !pbegin)
33 return;
34 if (*pbegin == '\0')
35 cout<<pstr<<endl;
36 else
37 {
38 for (char *pch = pbegin; *pch != '\0'; pch ++)
39 {
40 exchange(pch, pbegin);
41 display(pstr, pbegin + 1);
42 exchange(pch, pbegin);
43 }
44 }
45 }
46
47 /**
48 * 打印出一个符的所有组合
49 * @param str
50 */
51 void display(char *str)
52 {
53 display(str, str);
54 }
55
56 /**
57 * 主函数,用于测试
58 * @param argc
59 * @param argv
60 * @return
61 */
62 int main(int argc, char** argv)
63 {
64 char s[] = "abc";
65 display(s);
66 return 0;
67 }
相关阅读 更多 +
排行榜 更多 +