字符集的排列算法(包括重排列)
来源:互联网 发布:c语言求1到100的素数 编辑:程序博客网 时间:2024/06/10 07:26
问题:输入一串字符,每个字符都是唯一的,比如'a','b','c','d', 需要输出这串字符的全部排列。
分析:根据排列原理,排列的可能性有n!种(n为字符的个数)。直觉上讲,首先从字符集合中选取一个字符,然后从剩下的字符中选取另外一个字符,如此下去,直到所有字符用完为止。另外一种可能性是:先假设一个子串已经排列好,比如abc,然后将下一个字符串d插入到已经排好的字符串的两边和中间位置(这里共有4个位置)。下面实现的是第一种算法:
程序:
上面程序中语句used[i] = false; 非常重要,递归调用完毕需要重新标记该字符可用。这样递归返回时可以在下一个for循环中再次使用该字符。例如如果当前循环的out为adb, 递归调用返回后字符c被标记为可用,这样下一次for循环可以使用c,即out的下一个值为adc。
如果有重复元素,以下是实现代码:
- 字符集的排列算法(包括重排列)
- 算法谜题90 座位重排(生成全排列的Johnson–Trotter算法)
- 算法:链表的重排
- 队列的应用--火车车厢重排列
- 全排列的递归算法(包括字典序输出和非字典序输出)
- 字符集的组合算法
- 批量重排标识列顺序
- Move Zeroes:数组重排列
- Knuth重排算法
- 重排--是否存在每两个相邻元素的乘积都是4的倍数的排列
- 重排数列--是否存在排列,排列后数组的每两个相邻元素的乘积都是4的倍数
- 字符串的排列[算法]
- 排列的基本算法
- 特殊排列的算法
- 排列的递归算法
- PowerDesigner怎样设置列的字符集
- Oracle的列操作(增加列,修改列,删除列),包括操作多列
- Oracle的列操作(增加列,修改列,删除列),包括操作多列
- varchar 和nvarchar的区别
- PHP中配置参数ServerLimit指令
- 介绍敏捷开发的七种主流武器
- 2011年5月24日WebGL伦敦聚会
- 查询并禁止apache中异常访问量的用户
- 字符集的排列算法(包括重排列)
- 跟我一起写 Makefile (一)——Makefile 介绍
- OLTP与OLAP
- 理财周报:马云帝国内幕
- 面试中几个基本的重要问题总结
- 最形象解释帮助理解快速排序
- 操作datatable进行分页,绑定repeqter或者gridView
- ZOJ 2010 Equipment Box(POJ 1380)(暴力离散化)
- Hadoop0.21.0编译方法