Java 二维数组/集合生成排列组合矩阵
- 写在前面
- 代码
- 测试代码
- 打印结果
- 结语
写在前面
Question:给出任意一个二维数组,要求输出数组元素的所有排列组合
例如:
1 2 3 4 5 6 7 | String[][] array = {{"a", "b", "c"}, {"d", "e", "f", "g"}, {"h", "i"}}; **输出**: adh,aeh,afh,agh,adi,aei,afi,agi bdh,beh,bfh,bgh,bdi,bei,bfi,bgi cdh,ceh,cfh,cgh,cdi,cei,cfi,cgi |
代码
二维数组矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /** * @param array 目标数组 * @return 矩阵结果 * @description: 根据给定二维数组,输出排列组合矩阵 */ public String[][] generateMatrix(String[][] array) { ArrayList<Integer> lengthArr = new ArrayList<>(); ArrayList<Integer> productArr = new ArrayList<>(); int length = 1; for (int i = 0; i < array.length; i++) { int len = array[i].length; lengthArr.add(len); int product = i == 0 ? 1 : array[i - 1].length * productArr.get(i - 1); productArr.add(product); length *= len; } String[][] result = new String[array.length][length / array.length]; for (int i = 0; i < length; i++) { StringBuilder item = new StringBuilder(); for (int j = 0; j < array.length; j++) { item.append(array[j][(int) (Math.floor(i / productArr.get(j)) % lengthArr.get(j))]); } int index1 = i % array.length; int index2 = i / array.length; result[index1][index2] = item.toString(); } return result; } |
二维数组集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * @param array 目标数组 * @return 排列组合结果 * @description: 根据给定二维数组,输出排列组合结果 */ public ArrayList<String> generateList(String[][] array) { ArrayList<Integer> lengthArr = new ArrayList<>(); ArrayList<Integer> productArr = new ArrayList<>(); ArrayList<String> result = new ArrayList<>(); int length = 1; for (int i = 0; i < array.length; i++) { int len = array[i].length; lengthArr.add(len); int product = i == 0 ? 1 : array[i - 1].length * productArr.get(i - 1); productArr.add(product); length *= len; } for (int i = 0; i < length; i++) { StringBuilder item = new StringBuilder(); for (int j = 0; j < array.length; j++) { item.append(array[j][(int) (Math.floor(i / productArr.get(j)) % lengthArr.get(j))]); } result.add(item.toString()); } return result; } |
测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @Test public void testJava() { String[] row1 = new String[]{"a", "b", "c"}; String[] row2 = new String[]{"d", "e", "f", "g"}; String[] row3 = new String[]{"h", "i"}; String[][] array = {row1, row2, row3}; //获取矩阵结果 String[][] matrix = generateMatrix(array); for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + ","); } System.out.println(); } System.out.println("**********************************************************"); //获取集合 ArrayList<String> list = generateList(array); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } |
打印结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | adh,aeh,afh,agh,adi,aei,afi,agi, bdh,beh,bfh,bgh,bdi,bei,bfi,bgi, cdh,ceh,cfh,cgh,cdi,cei,cfi,cgi, ********************************************************** adh bdh cdh aeh beh ceh afh bfh cfh agh bgh cgh adi bdi cdi aei bei cei afi bfi cfi agi bgi cgi |
结语
如果对你有帮助,请点击左下角一键三连 /理直气壮.jpg