java组合排列算法
来源:互联网 发布:剑三数据库 编辑:程序博客网 时间:2024/06/05 09:39
/** * 实现的算法 * @param a 数据数组 * @param num M选N中 N的个数(无序) Cmn * @return */ public static List<String> combine(String[] a, int num) { List<String> list = new ArrayList<String>(); StringBuffer sb = new StringBuffer(); String[] b = new String[a.length]; for (int i = 0; i < b.length; i++) { if (i < num) { b[i] = "1"; } else b[i] = "0"; } int point = 0; int nextPoint = 0; int count = 0; int sum = 0; String temp = "1"; while (true) { // 判断是否全部移位完毕 for (int i = b.length - 1; i >= b.length - num; i--) { if (b[i].equals("1")) sum += 1; } // 根据移位生成数据 for (int i = 0; i < b.length; i++) { if (b[i].equals("1")) { point = i; sb.append(a[point]); sb.append(" "); count++; if (count == num) break; } } //输出数据// System.out.println(sb.toString()); // 往返回值列表添加数据 list.add(sb.toString()); // 当数组的最后num位全部为1 退出 if (sum == num) { break; } sum = 0; // 修改从左往右第一个10变成01 for (int i = 0; i < b.length - 1; i++) { if (b[i].equals("1") && b[i + 1].equals("0")) { point = i; nextPoint = i + 1; b[point] = "0"; b[nextPoint] = "1"; break; } } // 将 i-point个元素的1往前移动 0往后移动 for (int i = 0; i < point - 1; i++) for (int j = i; j < point - 1; j++) { if (b[i].equals("0")) { temp = b[i]; b[i] = b[j + 1]; b[j + 1] = temp; } } // 清空 StringBuffer sb.setLength(0); count = 0; } // System.out.println("数据长度 " + list.size()); return list; }
传参为{“1”,“2”,“3”,“4”,“5”}和3
结果如下:
/** * 实现的算法 * @param ss 数据数组 * @param i M选N中 N的个数(有序) Amn * @return */ private static int sum = 0; public static void permutation(String[]ss,int i){ if(ss==null||i<0 ||i>ss.length){ return; } if(i==ss.length){ StringBuilder sb = new StringBuilder(""); for (int j = 0; j < ss.length; j++) { sb.append(ss[j]+" "); }// System.out.println(new String(ss)); System.out.println(sb.toString()); sum++; System.out.println("排列组合有:"+sum); }else{ for(int j=i;j<ss.length;j++){// char temp=ss[j];//交换前缀,使之产生下一个前缀 String temp=ss[j];//交换前缀,使之产生下一个前缀 ss[j]=ss[i]; ss[i]=temp; permutation(ss,i+1); temp=ss[j]; //将前缀换回来,继续做上一个的前缀排列. ss[j]=ss[i]; ss[i]=temp; } } } public static void main(String args[]){// char []ss={'a','c','b'}; String[] ss = {"a","c","b"}; permutation(ss,0); }结果如下:
阅读全文
0 0
- java组合排列算法
- java求组合排列算法
- java排列和组合算法
- Java实现全排列、组合算法
- 排列与组合的JAVA通用算法
- 排列、组合及算法
- 排列、组合及算法
- 排列 组合 算法 C#
- 快速组合排列算法
- 排列与组合算法
- 排列与组合算法
- 组合全排列算法
- 排列和组合算法
- 算法 排列、组合 相关
- java 实现 排列 组合
- 组合排列的通用算法
- 组合排列的javascript算法
- 排列 组合 算法(一)
- ios学习进阶
- floyd判断列表是否有cycle
- 【java用I/O流下载】给个url就能下载,可复制粘贴直接使用
- sqlserver子查询分页优化
- Qt 5.7 版本+2013VS环境配置
- java组合排列算法
- 『 Spark 』5. 不能错过的 spark 学习资源
- Java 进程间文件锁FileLock详解
- 进程和线程
- 【Python】学习遇到错误记录
- java导出数据为excle
- Gogs 的 Window 安装
- 机器学习之性能分析
- JavaNIO学习之FileChannel