比如a(1,3) b(-2,-4)
新组合2个数组的元素都包括:(1,-2)(1,-2,-4)(3,-2)(3,-4)(3,-2,-4)(1,3,-2,-4);
新的组合中的元素以sring类型保存在数组中,如string a ="1,-2";求数组a 长度为a.length ,b b.length 的所有可能组合。

解决方案 »

  1.   


    public class TwoArrAssemble {
    static void combination(int[][] array, int alength, int blength, int sub) {
    if (sub >= array[0].length) {
    int a = 0, b = 0;
    for (int j = 0; j < array[0].length; ++j) {
    if (j < alength)
    a += array[1][j];
    else
    b += array[1][j];
    }
    if (a != 0 && b != 0) {
    for (int j = 0; j < array[0].length; ++j)
    if (array[1][j] == 1)
    System.out.print(array[0][j] + "  ");
    System.out.println();
    }
    return;
    }
    array[1][sub++] = 1;
    combination(array, alength, blength, sub);
    array[1][sub - 1] = 0;
    combination(array, alength, blength, sub);
    } public static void main(String[] args) {
    int[] a = { 1, 3};
    int[] b = { -2, -4};
    int[][] array = new int[2][a.length + b.length];
    for (int i = 0; i < array[0].length; ++i) {
    if (i < a.length)
    array[0][i] = a[i];
    else
    array[0][i] = b[i - a.length];
    array[1][i] = 1;
    }
    combination(array, a.length, b.length, 0);
    }
    }
    1  3  -2  -4  
    1  3  -2  
    1  3  -4  
    1  -2  -4  
    1  -2  
    1  -4  
    3  -2  -4  
    3  -2  
    3  -4 a.b数组可任意改变
      

  2.   

    以从一个数组里所有组合的代码修改一下import java.util.Vector;//在N个数组里分别在每个数组里选出至少一个元素组成新的数组
    public class SelectNumbers
    {
    //在source数组里从startIndex之后(含startIndex)开始选出cout个不同的数字。结果添加进vresult向量
    public void selectInArray(int [] source, Vector<String> vresult, String result, int startIndex, int cout)
    {
    if (cout == 1)
    {
    String s1 = result + "," + source[startIndex];
    vresult.add(s1.substring(1));
    return;
    }
    for (int i=startIndex+1; i<source.length; i++)
    selectInArray(source, vresult, result + "," + source[startIndex], i, cout-1);
    }

    public void display(Vector<String> vs1, Vector<String> vs2)
    {
    for (int i=0; i<vs1.size(); i++)
    for (int j=0; j<vs2.size(); j++)
    System.out.println("(" + vs1.get(i) + ")(" + vs2.get(j) + ")");
    }

    public static void main(String [] args)
    {
    SelectNumbers demo = new SelectNumbers();
    int [][] arrSource = {{1, 3}, {-2, -4}};//arrSource一维长度就是代表数组个数N
    Vector<String>[] arrvs = new Vector[arrSource.length];
    for (int i=0 ; i<arrSource.length; i++)
    {
    arrvs[i] = new Vector<String>();
    for (int startIndex=0; startIndex< arrSource[i].length; startIndex++)
    for (int cout=1; cout<=arrSource[i].length-startIndex; cout++)
    {
    String result = "";
    demo.selectInArray(arrSource[i], arrvs[i], result, startIndex, cout);
    }
    }
    demo.display(arrvs[0], arrvs[1]);
    }
    }