博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串的排列
阅读量:7038 次
发布时间:2019-06-28

本文共 1236 字,大约阅读时间需要 4 分钟。

 

 

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

求整个字符串的排列,可以看成两步

  1. 首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。下图就是分别把第一个字符a和后面b、c等字符交换的情形。
  2. 第二步固定第一个字符(如图a所示),求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换(如图b所示)。。。

 

分析到这里,其实可以看出,这就是很典型的递归思路

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void 
Permutation(
char
* pStr)
{
    
if
(pStr == NULL)
        
return
;
 
    
Permutation(pStr, pStr);
}
 
void 
Permutation(
char
* pStr, 
char
* pBegin)
{
    
if
(*pBegin == 
'\0'
)
    
{
        
printf
(
"%s\n"
, pStr);
    
}
    
else
    
{
        
for
(
char
* pCh = pBegin; *pCh != 
'\0'
; ++ pCh)
        
{
            
char 
temp = *pCh;
            
*pCh = *pBegin;
            
*pBegin = temp;
 
            
Permutation(pStr, pBegin + 1);
 
            
temp = *pCh;
            
*pCh = *pBegin;
            
*pBegin = temp;
        
}
    
}
}

 在函数Permutation(char* pStr, char* pBegin)中,指针pStr指向整个字符串的第一个字符,pBegin指向当前我们做排列操作的字符串的第一个字符。在每一次递归的时候,我们从pBegin向后扫描每一个字符(即指针pCh指向的字符)。在交换pBegin和pCh指向的字符之后,我们再对pBegin后面的字符递归地做排列操作,直至pBegin指向字符串的末尾。

测试代码如下:

 

 

扩展1:如果不是求字符的所有排列,而是求字符的所有组合,应该怎么办呢?当输入的字符串中含有相同的字符串时,相同的字符交换位置是不同的排列,但是同一个组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。()

扩展2:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得正方体上三组相对的面上的4个顶点的和相等。

 

 

 

 

 本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3405948.html,如需转载请自行联系原作者

你可能感兴趣的文章
web标准与html语义化
查看>>
ApacheCN 捐赠名单 2018
查看>>
JavaScript之Arguments对象暂存函数参数与属性
查看>>
Python入门第二章--第四节:运算符(二)
查看>>
web-java-复制对象
查看>>
基于Kafka的实时计算引擎如何选择?
查看>>
聊聊flink的ActorGateway
查看>>
自己看的
查看>>
JavaScript— console (30)
查看>>
组件:Image
查看>>
node连接mongodb数据库
查看>>
React-代码复用(mixin.hoc.render props)
查看>>
iOS学习笔记24 不断进化的屏幕适配
查看>>
Chrome crx插件扩展离线安装方法 (兼容所有版本)
查看>>
工作了四五年,感觉技术上依旧长进不大
查看>>
three.js 多模型世界坐标转屏幕坐标
查看>>
[MySQL光速入门]005 查询数据
查看>>
UI设计必备:关于图标的设计优化
查看>>
JAVA springboot微服务b2b2c电子商务系统(二)服务消费者(rest+ribbon)
查看>>
java b2b2c shop 多用户商城系统源码- config 修改配置
查看>>