给定数组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]});
}
}
}