文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>100题_28 字符串的排列

100题_28 字符串的排列

时间:2011-03-16  来源:小橋流水

输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

这题主要考察的是我们对递归的理解。对于三个字符a, b, c的情况,我们先固定a,剩余的b,c做全排列,然后固定b(将a与b交换),a,c做全排列,最后固定c(c与a交换),a,b做全排列。知道了三个的情况,对于更高的情况,我们递归就好了。

 

下面是代码:

代码  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 }

 

相关阅读 更多 +
排行榜 更多 +
宝宝情商养成宝宝巴士

宝宝情商养成宝宝巴士

休闲益智 下载
燥热手机版

燥热手机版

飞行射击 下载
巨人狙击手安卓版

巨人狙击手安卓版

飞行射击 下载