Java实现全排列、组合算法
来源:互联网 发布:销售订单软件 编辑:程序博客网 时间:2024/05/22 11:37
Java实现全排列、组合算法
摘要: Java实现全排列、组合算法
全排列
解法一:
输入一串字符,然后对字符进行全排列,如“abc”,全排列结果为:"abc","acb","bac","bca","cab","cba".
分析:从字符串中选择一个作为第一个字符,然后对剩下的字符串进行全排列,如此递归下去,直到打印出全部排列。如:"abc":
1、选a作为第一个字符:”abc“,”acb“;
2、选b作为第一个字符:”bac“,”bca“;
3、选c作为第一个字符:”cab“,”cba“;
参考代码如下:
递归实现全排列算法
解法二:
这种解法是将字符串从小大倒排序,以此得到整体的最小顺,然后找到次小顺序,直到得到最大顺序,也就是从大到小的顺序,如:”23415“,最小顺序是:"12345",次小顺序是:”12354“,........直到最大顺序:”54321“。这里重点是找到某个顺序值得下一个顺序。找下一个顺序的算法如下:假设到了”21543“,从后往前找到i-1位置小于i位置的下标,1<5,所以要找的下表pos=1,将下标为1的数字1,和它后面最小的且大于它的数替换,”21543”--->"23541",然后再将下标1后面的字符串翻转得到:"23145",这就得到了“21543”下一个顺序值“23145”,如此下去,直到输出所有结果。如果你想学习java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载。
参考代码如下:
排列算法的结果总共有n!个,所以时间复杂度至少n!级别。
组合算法
组合算法代码比较简单,可以读代码理解:
放回全排列
放回全排列就是类似于三个筛子总共有6*6*6=216中结果。使用递归思想解决,代码比较简洁。
参考代码如下:
- Java实现全排列、组合算法
- 全排列、全组合 java实现
- 全排列和组合的实现算法
- 全排列和组合的实现算法
- 组合全排列算法
- 全排列和组合-JAVA版本实现
- java实现全排列和组合
- 全排列算法(Java实现)
- 全排列算法【java实现】
- 全排列算法java实现
- Java 实现全排列算法
- 全排列算法Java实现
- 数组全排列算法实现和组合算法实现
- 全排列算法与全组合算法
- 全排列算法与全组合算法
- 全排列算法与全组合算法
- 全排列和组合算法的C#语言实现
- 全排列算法(java实现)
- Android 软键盘汇总
- CSS---使用flex布局做响应式页面
- 解决AndroidStudio添加ProjectLibary后在编译时遇到的各种问题之解决方式索引(finished with non-zero exit value and so on...)
- 廖雪峰Python的研读笔记(二) 函数式编程
- C# 操作EXCEL文件
- Java实现全排列、组合算法
- Spring注入Date类型的数据到Bean中
- SpringMVC分布式架构
- Context#getResources().getDrawable()方法过时后的替代方法
- 题目1031:xxx定律
- 软件安装
- HDU1147:Pick-up sticks(线段相交)
- Spring3
- 史上最简单的 SpringCloud 教程 | 终章