全排列
问题描述
输入一个字符串,求字符串包含元素(含重复,比如aab的情况)的所有排列可能。
例如:输入abc,所有排列组合包括: abc, acb, bac, bca, cab, cba。
递归解法
思路:如果输入为abcdef,则首先确定排列的第一个字母,有6中可能,如果选定a,则其后接bcdef的全排列,明显适用于递归结题。结题思路为第一个字母分别选定所有可能的情况,然后对剩下的字母进行递归。递归终止条件为选定的字母的下标为字符串长度-1。
实现
|
|
字典序法
- 思想:将输入排序,如输入为1234,则其最小值为1234,然后下一次加入的值为除了1234以外,1,2,3,4组成的最小的值。获取方法为从末尾找第一个从右向左不递增的数a,然后找到从末尾开始从右向左第一个大于a的数,并将这两个数交换次序。然后将原来a的位置之后的字符串反序。也就是说1234,的下一个为1243,在下一个为1324..直到字符串从右向左递增为止。
实现:
|
|
全组合
- 题目描述:输入一个字符串,求字符的所有组合。如abc,则输出可能为a,b,c,ab,ac,bc,abc。
|
|
- 基于位图:假定元素有n个,则最终结果组合为2^n-1个,我们使用位操作方法:假设元素原本为123,则1表示取该元素,0表示不取该元素。000是没有意义是,则选取的对应如下:
001,010,100,011,101,110,111->a,b,c,bc,ac,ab,abc。
|
|