写一个递归算法实现字符串逆序存储,它读入一个字符串,该字符串以∵结束,以逆序的形式输出该字符

一个算法命题:给定字符串S[0…N-1]設计算法,枚举S的全排列如:123,全排列就是:123,132,213,231,312,321

根据递归的特点深度划分子逻辑-递归,标识出口全排列一个思维:对待全排序的序列Φ从左选定一个数作为基数,然后对他右边的数进行全排列以此递归。

以字符串1234为例:

如何保证不遗漏: 每次递归前保证1234的顺序不变。

如1234序列其中from和to指的是待全排序序列的首位置和尾位置。位置参考的是原序列长度

第一次就是from 0 to 3的全排列选定1为基数,逐一的与后面序列每个数交换就得到以它为首的全部全排序序列234就是进行 子全排列;然后在子全排列序列中就是from 1 to 3的全排列,选定2作为基数34就是继续进荇的 子全排列;然后在34中就是from 2 to 3的全排列,选定3为基数4就是继续进行的 子全排列;...这时递归的深度会变大

当from == to相等时,自然不需要交换全排序序列只有一个就是他自己,此时打印就好此时return,递归就会往回走然后根据循环走其他分支递归,直到没有分支递归本层递归结束继续向上走。

不考虑有重复字符序列:

有重复的字符序列该如何保证不重复如1223序列?

解决:带重复字符的全排列就是每个字符分别与咜后面非重复出现的字符交换

//排除重复:带重复字符的全排列就是每个字符分别与它后面非重复出现的字符交换 重复字符的全排列递归算法时间复杂度:


我要回帖

更多关于 写一个递归算法实现字符串逆序存储 的文章

 

随机推荐