java如何实现排列组合算法
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍java如何实现排列组合算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!java排列组合算法[@more@]import java.util.ArrayLis
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
男友做软件开发创业
1046数据库
数据库 in
网络安全宪法小知识
服务器监控王
如何清理数据库三个月前的数据
ibm服务器集群
交通局网络安全与网络舆情风险点
网络安全实训体会和总结
英雄联盟 连接版本服务器
华为软件开发招大专生么
饥荒科雷服务器在哪
网络技术基础资料推荐
相框制作软件开发
网络技术路由器报表
冰峰网络安全ppt
某公司有数据库 其中
数据库访问超过最大连接数
阿拉德之怒服务器是不是通用的
上海杨桃互联网科技有限公司
高性能数据处理服务器
安全数据库
中学生网络安全教育课件
南京信息软件开发供应
空间网络安全研究生调剂
数据库中用户头像表
管家婆服务器地址
我的世界电脑版GTA服务器
游戏软件开发的竞争分析
大话服务器跨网