字符串全排列的递归实现
原理图:以abcd为例
第一次选择:有4种
第二次选择:有剩余3种
第三次选择:有2种,直接排列
//写递归程序关键又两点:处理好进入与返回的关系,进入时改变了什么,返回时应当恢复,像栈一样
//字符串全排列,每次只用交换2个字符的位置就会生成一个新的排列
voidArrangement(char *str, int len)
{
for(int i =1;i <= len;i++)
{
if(len ==2)
{
printf("%s\n",str);
swap(str, len-1, len-2);//交换位置
printf("%s\n",str);
swap(str, len-1, len-2);//恢复原来位置
return;
}
Arrangement(str, len-1);
if(i >1)
{
swap(str, i-1-1, len-1);//恢复原来位置
}
if(i == len)
return; //这一轮结束
swap(str, i-1, len-1);//交换位置,进入下一轮
}
}
//当前写的这个函数只解决了没有重复字符串的全排列,所以还需要改进,大家有什么好的建议,希望多多分享
分享到:
相关推荐
Java写的源码,解决各种字符串全排列问题,已解决重复问题,经过上机调试可直接运行
常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba 思路 这是典型的递归求解问题,递归算法有四个特性: 必须有可...
可以打印出字符串的全排列,代码是C语音风格的,刚学习编程时写的代码
CC++全排列..1--n的全排列以及字符串的全排列
主要介绍了Java实现字符数组全排列的方法,涉及Java针对字符数组的遍历及排序算法的实现技巧,需要的朋友可以参考下
主要介绍了Python字符串的全排列算法,结合实例形式较为详细的总结分析了Python字符串全排列的常见操作技巧,需要的朋友可以参考下
主要内容 需要掌握的内容 字符串循环左移 LCS最长递增子序列 字符串全排列 递归、非递归 KMP Huffman编码 需要了解的内容 Manacher算法 BM算法 数据结构-字符串全文共87页,当前为第3页。 字符串循环左移 4/88 给定...
主要为大家详细介绍了Java递归实现字符串全排列与全组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
输出有重复字符的全排列,C++源码......
字符串全排列面试准备 一个包含好的面试问题链接的存储库。 我们是一群来自并分享我们在面试准备和面试过程中面临的问题的学生团队。 想为面试准备做出贡献:请查看我们的 网站 主题明智的问题 公司明智的问题 ->...
在本篇文章里小编给大家整理了关于PHP实现字符串的全排列的相关知识点内容,需要的朋友们学习参考下。
JavaScript应用实例-字符串所有排列组合.js
易语言数字文本的全排列.rar
简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。
这样我们也得到了在全排列中去掉重复的规则——去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。用编程的话描述就是第i个数与第j个数交换时,要求[i,j)中没有与第j个数相等的数。下面给出...
字符串的全排列和组合算法.doc
下面小编就为大家带来一篇js实现字符全排列算法的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧