我的函数中生成数组元素的所有组合的错误是什么?

时间:2016-02-14 19:21:59

标签: java arrays combinations

我正在尝试生成一个包含整数数组的所有可能组合的数组的数组;排除空集和原始集本身。这是我写的代码。外循环一直运行,直到要包含在子集中的元素数等于原始集中的元素数。外部for循环运行以添加新子集的所有元素以及一个附加元素。例如,循环应该通过:A,B然后添加C,然后添加D;生成A,B,C和A,B,D。然后子集应转移到B,C并加D以得到B,C,D。此过程将继续,直到创建所有子集。但是我得到一个超出范围的数组索引。

    double pow = Math.pow(2.0, a.length);
    char[][] b = new char[(int)pow-2][a.length-1];

    int start = 0;
    int end = 0;
    int includedElements = 1;
    int curI = 0;

    while(includedElements<=a.length) {

        if(end == a.length) {
            start = 0;
            includedElements+=1;
            end = includedElements-1;
        }

        for(int h = end+1; h<a.length; h++) {
            b[curI] = new char[includedElements];

            for(int i = start, index = 0; i<=end; i++, index++) {
                b[curI][index] = a[i];
            }

            b[curI][b[curI].length] = a[h];
        }
        curI++;

        start+=1;
        end+=1;
    }

1 个答案:

答案 0 :(得分:1)

我认为你应该首先找出你真正想要的东西。组合和排列之间存在差异(参见here)。当你知道这一点,你可以谷歌确切的期限。我想你想要的是排列而不重复。这是一个可以递归解决的练习(example)。