组合问题
2011-03-28 22:42
253 查看
航班组合问题:
AirLine类:
打印结果:
package com.shanghai.test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class TestComb { public static void main(String[] args) { //初始化 AirLine[] aLines = {new AirLine(1, "Line-01"),new AirLine(2, "Line-02"),new AirLine(3, "Line-03")}; AirLine[] bLines = {new AirLine(4, "Line-04"),new AirLine(5, "Line-05")}; AirLine[] cLines = {new AirLine(6, "Line-06"),new AirLine(7, "Line-07")}; List<AirLine[]> airLinesList = new ArrayList<AirLine[]>(); airLinesList.add(aLines); airLinesList.add(bLines); airLinesList.add(cLines); //测试时间 System.out.println(System.currentTimeMillis()); List<AirLine[]> result = getCombLines(airLinesList); System.out.println(System.currentTimeMillis()); //打印结果 for (int i = 0; i < result.size(); i++) { AirLine[] airLines = result.get(i); for (AirLine airLine : airLines) { System.out.print(airLine.getName() + "\t"); } System.out.print("\n"); } } public static List<AirLine[]> getCombLines(List<AirLine[]> airLinesList){ return getCombLines(airLinesList, 0, null); } private static List<AirLine[]> getCombLines(List<AirLine[]> airLinesList,int index ,AirLine[] combLinesArr){ if (index >= airLinesList.size() || index < 0) { throw new IllegalArgumentException("Invalid Argument For index:" + index); } if (combLinesArr == null) combLinesArr = new AirLine[]{}; List<AirLine[]> result = new ArrayList<AirLine[]>(); int combLength = combLinesArr.length; for (AirLine line : airLinesList.get(index)) { // AirLine[] newCombLinesArr = Arrays.copyOf(combLinesArr, combLength + 1);//JDK1.6 AirLine[] newCombLinesArr = new AirLine[combLength + 1]; System.arraycopy(combLinesArr, 0, newCombLinesArr, 0, combLength); newCombLinesArr[combLength] = line; if (index < airLinesList.size() - 1) result.addAll(getCombLines(airLinesList,index+1,newCombLinesArr)); else result.add(newCombLinesArr); } return result; } }
AirLine类:
public class AirLine { private int id; private String name; public AirLine(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
打印结果:
1301323243958 1301323243958 Line-01 Line-04 Line-06 Line-01 Line-04 Line-07 Line-01 Line-05 Line-06 Line-01 Line-05 Line-07 Line-02 Line-04 Line-06 Line-02 Line-04 Line-07 Line-02 Line-05 Line-06 Line-02 Line-05 Line-07 Line-03 Line-04 Line-06 Line-03 Line-04 Line-07 Line-03 Line-05 Line-06 Line-03 Line-05 Line-07
相关文章推荐
- 算法题-排列组合问题
- 穷举法解决组合问题1
- 排列组合 "n个球放入m个盒子m"问题 总结
- Java面向对象继承与组合的问题
- java-组合接口中的名字冲突问题
- BZOJ4870 [Shoi2017]组合数问题 【组合数 + 矩乘】
- Algorithm --> 邮票连续组合问题
- 字符串的全排列和所有组合问题
- 求解组合问题的一个迭代算法
- c语言实现排列组合算法问题
- 背包问题-组合问题-排列问题
- 动态规划之硬币组合问题
- 小数学解决大问题 - 分类器组合方法(由民主投票想到)
- LeetCode.46(47) Permutations && II (经典的对数列求组合问题)
- C++组合问题
- 数字组合问题
- 每个人都该知道的5个关于组合模型的简单问题
- C/C++ 使用rand()组合形式生成大于15位的随机数时存在的问题
- word的图片和自选图形组合问题
- 排列组合问题:n个数中取m个(Golang实现)