给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合
给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合
ruby代码:
def all_possible_arr arr, length = 5 ret = [] length.times do if ret.empty? ret = arr.map {|i| [i]} else new_ret = [] ret.each do |r| arr.each do |e| new_ret << r.clone.unshift(e) end end ret = new_ret end end ret end p all_possible_arr [1, 2, 3]
JAVA代码:
package com.test; import java.util.ArrayList; public class TestEmu { @SuppressWarnings("unchecked") public ArrayList<ArrayList<Integer>> getArray(ArrayList<Integer> ll, int len) { ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); for (int i = 0; i < len; i++) { if (list.size() == 0) { for (int j = 0; j < ll.size(); j++) { ArrayList<Integer> temp = new ArrayList<Integer>(); temp.add(ll.get(j)); list.add(temp); } } else { ArrayList<ArrayList<Integer>> temp = new ArrayList<ArrayList<Integer>>(); for (ArrayList<Integer> l : list) { for (int m : ll) { ArrayList<Integer> t = (ArrayList<Integer>) l.clone(); t.add(m); temp.add(t); } } list = temp; } } return list; } public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); TestEmu te = new TestEmu(); ArrayList<ArrayList<Integer>> ll = te.getArray(list, 5); for(ArrayList<Integer> l:ll){ for(int i:l){ System.out.print(i+" "); } System.out.println(); } } }
递归实现:
package com.test.util; import java.util.Arrays; public class Test { private int end; private int[] arr; public void setEnd(int end) { this.end = end; } public void setArr(int[] arr) { this.arr = arr; } public void test(int[] cur){ if(cur.length==end){ System.out.println(Arrays.toString(cur)); return; } for (int i = 0; i < arr.length; i++) { int[] temp = this.mergeIntArray(cur, new int[]{arr[i]}); test(temp); } } private int[] mergeIntArray(int[] arr1, int[] arr2){ int[] arr = new int[arr1.length+arr2.length]; for (int i = 0; i < arr1.length; i++) { arr[i] = arr1[i]; } for (int i = 0; i < arr2.length; i++) { arr[arr1.length+i] = arr2[i]; } return arr; } public static void main(String[] args) { Test t = new Test(); int[] i = new int[]{1,2}; t.setEnd(5); t.setArr(i); for (int j = 0; j < i.length; j++) { t.test(new int[]{i[j]}); } } }
点亮测试人生!QQ:408129370
百度阅读电子书地址:http://yuedu.baidu.com/ebook/f6dbb2a2f01dc281e53af0f3
讨论QQ群:536192476
个人公众号:
百度阅读电子书地址:http://yuedu.baidu.com/ebook/f6dbb2a2f01dc281e53af0f3
讨论QQ群:536192476
个人公众号:
![](http://files.cnblogs.com/files/zhangfei/%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91%E6%B1%9F%E6%B9%96.bmp)