Java实现多个数组间的排列组合,可以通过使用递归实现。具体步骤如下:
1.定义递归方法,其中参数包括原始数组列表、临时结果列表、深度(代表当前已经处理完的数组层数)、结果列表(存储最终结果)
2.当深度达到原始数组列表的大小时,将临时结果列表添加到结果列表中
3.遍历当前原始数组,逐个取出数组中的元素,添加到临时结果列表中
4.每取出一个数组元素,深度加1,再次调用递归方法,处理下一层数组
5.处理完当前数组,将临时结果列表的最后一个元素删除,深度减1,回溯到上一层递归调用的位置
6.遍历完所有原始数组中的元素,即可得到所有数组的排列组合结果
下面通过两个示例说明具体实现方法:
示例1:有3个数组,分别是[1,2,3]、[4,5]和[6]。要求输出它们的排列组合。
import java.util.ArrayList;
import java.util.List;
public class ArrangementCombination {
public static void main(String[] args) {
List<List<Integer>> arrays = new ArrayList<>();
arrays.add(new ArrayList<>(){{add(1); add(2); add(3);}});
arrays.add(new ArrayList<>(){{add(4); add(5);}});
arrays.add(new ArrayList<>(){{add(6);}});
List<List<Integer>> results = new ArrayList<>();
arrangeCombine(arrays, new ArrayList<>(), 0, results);
System.out.println(results);
}
public static void arrangeCombine(List<List<Integer>> arrays, List<Integer> tempRes, int depth, List<List<Integer>> results) {
if (depth == arrays.size()) {
results.add(new ArrayList<>(tempRes));
return;
}
List<Integer> currentArray = arrays.get(depth);
for (int i = 0; i < currentArray.size(); i++) {
tempRes.add(currentArray.get(i));
arrangeCombine(arrays, tempRes, depth + 1, results);
tempRes.remove(tempRes.size() - 1);
}
}
}
输出结果如下:
[[1, 4, 6], [1, 5, 6], [2, 4, 6], [2, 5, 6], [3, 4, 6], [3, 5, 6]]
这6个列表分别对应于3个原始数组的所有排列组合。
示例2:有4个数组,分别是[1,2]、[3,4]、[5,6]和[7,8]。要求输出它们的排列组合。
import java.util.ArrayList;
import java.util.List;
public class ArrangementCombination {
public static void main(String[] args) {
List<List<Integer>> arrays = new ArrayList<>();
arrays.add(new ArrayList<>(){{add(1); add(2);}});
arrays.add(new ArrayList<>(){{add(3); add(4);}});
arrays.add(new ArrayList<>(){{add(5); add(6);}});
arrays.add(new ArrayList<>(){{add(7); add(8);}});
List<List<Integer>> results = new ArrayList<>();
arrangeCombine(arrays, new ArrayList<>(), 0, results);
System.out.println(results);
}
public static void arrangeCombine(List<List<Integer>> arrays, List<Integer> tempRes, int depth, List<List<Integer>> results) {
if (depth == arrays.size()) {
results.add(new ArrayList<>(tempRes));
return;
}
List<Integer> currentArray = arrays.get(depth);
for (int i = 0; i < currentArray.size(); i++) {
tempRes.add(currentArray.get(i));
arrangeCombine(arrays, tempRes, depth + 1, results);
tempRes.remove(tempRes.size() - 1);
}
}
}
输出结果如下:
[[1, 3, 5, 7], [1, 3, 5, 8], [1, 3, 6, 7], [1, 3, 6, 8], [1, 4, 5, 7], [1, 4, 5, 8], [1, 4, 6, 7], [1, 4, 6, 8], [2, 3, 5, 7], [2, 3, 5, 8], [2, 3, 6, 7], [2, 3, 6, 8], [2, 4, 5, 7], [2, 4, 5, 8], [2, 4, 6, 7], [2, 4, 6, 8]]
这16个列表分别对应于4个原始数组的所有排列组合。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现多个数组间的排列组合 - Python技术站