java如何实现排列组合算法
发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,这篇文章主要介绍java如何实现排列组合算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!java排列组合算法[@more@]import java.util.ArrayLis
千家信息网最后更新 2025年01月26日java如何实现排列组合算法
这篇文章主要介绍java如何实现排列组合算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
java排列组合算法[@more@]import java.util.ArrayList;import java.util.List;/*** 全排列组合算法* @author mukeliang* 2009.10.21*/public class TestComposite {public static void main(String[] args) {// List allList = getFirstData();// List allList = getSecondData();List allList = getThirdData();List targetList = combinatePlan(allList);System.out.println(targetList);}/*** 进行组合排列* @param sourceList* @return List*/private static List combinatePlan(List sourceList) {int[] subSizeArray;int[] subCountArray;int sourceCount = sourceList.size(); // 大list的长度subSizeArray = new int[sourceCount];subCountArray = new int[sourceCount];// 子list当前的值int targetCount = 1;for (int i = 0; i < sourceCount; i++) {List subList = (List) sourceList.get(i);int size = subList.size();subSizeArray[i] = size; // 存放每个子list的长度targetCount *= size; // 最终要返回的list长度subCountArray[i] = 0; // 从0开始 每个都是0// a.println("subCountArray[i]:"+subCountArray[i]);}List targetList = new ArrayList(targetCount);// targetCountfor (int i = 0; i < targetCount; i++) {// 记录每个结果应该包含的元素个数List targetSub = new ArrayList(sourceCount);for (int k = 0; k < sourceCount; k++) {int subIndex = subCountArray[k];targetSub.add(((List) sourceList.get(k)).get(subIndex));}addCount(subSizeArray, subCountArray);targetList.add(targetSub);}return targetList;}/*** 计算List下标: 总是先数最后一位,最后一位数到最大值以后进一位* @param subSizeArray* @param subCountArray*/private static void addCount(int[] subSizeArray, int[] subCountArray) {// subCountArray数组的每个元素都是0 但是个数来记录循环要取的位置for (int i = subCountArray.length - 1; i >= 0; i--) {if (subCountArray[i] < subSizeArray[i] - 1) {subCountArray[i]++;return;} else {subCountArray[i] = 0;}}}/*** 组合结果:* list1下标 list2下标* 0 0* 0 1* 0 2* 1 0* 1 1* 1 2* 2 0* 2 1* 2 2* @return List*/private static List getFirstData(){List list1 = new ArrayList();list1.add("王一");list1.add("王二");list1.add("王三");List list2 = new ArrayList();list2.add("张一");list2.add("张二");list2.add("张三");List allList = new ArrayList();allList.add(list1);allList.add(list2);return allList;}/*** 组合结果:* list1下标 list2下标 list3下标* 0 0 0* 0 0 1* 0 1 0* 0 1 1* 1 0 0* 1 0 1* 1 1 0* 1 1 1* @return List*/private static List getSecondData(){List list1 = new ArrayList();list1.add("王一");list1.add("王二");List list2 = new ArrayList();list2.add("张一");list2.add("张二");List list3 = new ArrayList();list3.add("刘一");list3.add("刘二");List allList = new ArrayList();allList.add(list1);allList.add(list2);allList.add(list3);return allList;}/*** 组合结果:* list1下标 list2下标* 0 0* 1 0* @return List*/private static List getThirdData(){List list1 = new ArrayList();list1.add("王一");list1.add("王二");List list2 = new ArrayList();list2.add("张一");List allList = new ArrayList();allList.add(list1);allList.add(list2);return allList;}}
以上是"java如何实现排列组合算法"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
组合
下标
算法
结果
长度
内容
篇文章
个子
个数
价值
元素
兴趣
刘一
小伙
小伙伴
更多
知识
行业
资讯
资讯频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么样修复微信的数据库
服务器内存1066hz什么意思
mysql 服务器
u8数据库配置
猪八戒接软件开发坑
深圳税局安全接入服务器
lol手游哪个服务器好打
软件开发的边界书籍
云服务器无法连接
虚拟主机和云服务器哪个安全
虹口区网络安全工控机价格
阳泉天创软件开发
2019网络安全案例分析
网络安全儿童画小学生一年级
图书借阅系统实验报告数据库
网络安全保卫大队大队长金谦
显示已投递到本地服务器
三年级网络安全手抄报的内容
软件开发外包合同审核要点
修改数据库复制文件的大小
软件开发一年对日转国内
北京互联网高科技企业
浏览器怎么发送数据到服务器
服务器充钱
中国网络安全法看点
软件开发公司好坏
图书借阅系统实验报告数据库
为什么数据库需要锁机制
客房管理数据库设计
网络安全测评学习机构