算法-NDimension

来源:互联网 发布:四下美术教学软件 编辑:程序博客网 时间:2024/06/15 07:42

NDimension

对N(N1….Nn)个一维数组,其中假设N1数组有X1个元素,N2数组有X2个元素…Nn数组有Xn个元素。我们想输出一个具有N个元素的数组,该数组中第一个元素来自N1数值,第二个元素来自N2数值….第n个元素来自Nn数组

Example;

input:double[] a={1,2,3};double[] d={10,11};output:[1.0, 10.0][1.0, 11.0][2.0, 10.0][2.0, 11.0][3.0, 10.0][3.0, 11.0]

Solution:

public class NDimension {    public static void main(String[] args) {        double[] a={1,2,3};        double[] b={4,5,6};        double[] c={7,8,9};        double[] d={10,11};        ArrayList values=new ArrayList();        values.add( a );      //  values.add( b );       // values.add( c );        values.add( d );        ArrayList<List<Double>> result=new ArrayList<>();        per(values,0,new ArrayList(),result);        System.out.println("values.size: "+values.size());        System.out.println("result.size: "+result.size());        for(int i=0;i<result.size();i++){            List<Double> temp=result.get(i);            System.out.println(temp);        }    }    public static void per(ArrayList<double[]> values, int index, ArrayList<Double> currentList,ArrayList<List<Double>> result) {        if (index == values.size()) {            //如果currentList已经完成,那么将其添加到result中,并返回上一次调用该函数处            List<Double> temp = new ArrayList<>(currentList);           // System.out.println("currentList: " + currentList);            result.add(temp);            return;        }        double[] temp = values.get(index);        index++;        for (int i = 0; i < temp.length; i++) {            // System.out.println("index:" + index + " value;" + temp[i]);            currentList.add(temp[i]);          //  System.out.print(index);            per(values, index, currentList, result);            //当完成了currentList时,返回到此处,删除currentList最后一个元素,并继续递归            currentList.remove(currentList.size() - 1);        }    }}

流程图:

Created with Raphaël 2.1.0开始index==N(是否完成一个数组组合)result.add(currntList)currentList.remove(最后一个元素)i<value.get(index).lengthcurrentList.add(value.get(index)[i])index++int i=0整个递归是否结束yesnoyesnono