给定数组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]});
		}
	}
	
}
原文地址:https://www.cnblogs.com/zhangfei/p/3332884.html