如何将数组拆分为3?

时间:2015-08-26 01:20:11

标签: java arrays

我有一个包含9个元素的数组,我希望将所有可能性分成3个。

我该怎么做?

为了更好地理解,选择9中的3,然后选择6中的3,剩下的将是最后的。有1680种可能性。我想要他们。

1 个答案:

答案 0 :(得分:0)

这更像是一个排列问题,而不是Java问题,但基本上你可以只计算{0,1,2,3,4,5,6,7,8}的所有排列,一旦你得到排列就取了前3个作为第一个数组,第二个作为第二个数组,最后3个作为第三个数组。顺便说一句,我选择了0-8而不是1-9,因为数组索引从0开始。

例如,第一个排列是0,1,2,3,4,5,6,7,8。我把它分成三个部分/数组,[0,1,2],[3,4,5],[6,7,8]。

我并不认为这是最佳方法,或者此代码已经过优化,但这是一个有趣的谜题。 :)

public class Permutations
{
    private boolean[] used;
    private StringBuilder out = new StringBuilder();
    private final String in;
    private String[] originalArray = { "a", "b", "c", "d", "e", "f", "g", "h", "i" }; // this can be changed to any array, e.g. int[]

    public static void main(String[] args)
    {
        Permutations p = new Permutations("012345678");
        p.permute();
    }

    public Permutations(final String str)
    {
        in = str;
        used = new boolean[in.length()];
    }

    public void permute()
    {
        if (out.length() == in.length())
        {
            System.out.println("Permutation: " + out);
            loadArrays(out);
            return;
        }

        for (int i = 0; i < in.length(); ++i)
        {
            if (used[i])
                continue;
            out.append(in.charAt(i));
            used[i] = true;
            permute();
            used[i] = false;
            out.setLength(out.length() - 1);
        }
    }

    public void loadArrays(StringBuilder p)
    {
        String[] array1 = new String[3];
        String[] array2 = new String[3];
        String[] array3 = new String[3];
        array1[0] = originalArray[Integer.parseInt(p.substring(0, 1))];
        array1[1] = originalArray[Integer.parseInt(p.substring(1, 2))];
        array1[2] = originalArray[Integer.parseInt(p.substring(2, 3))];
        array2[0] = originalArray[Integer.parseInt(p.substring(3, 4))];
        array2[1] = originalArray[Integer.parseInt(p.substring(4, 5))];
        array2[2] = originalArray[Integer.parseInt(p.substring(5, 6))];
        array3[0] = originalArray[Integer.parseInt(p.substring(6, 7))];
        array3[1] = originalArray[Integer.parseInt(p.substring(7, 8))];
        array3[2] = originalArray[Integer.parseInt(p.substring(8, 9))];

        System.out.println(String.format("Array1: [%s,%s,%s]", array1[0], array1[1], array1[2]));
        System.out.println(String.format("Array2: [%s,%s,%s]", array2[0], array2[1], array2[2]));
        System.out.println(String.format("Array3: [%s,%s,%s]", array3[0], array3[1], array3[2]));
        System.out.println();
    }
}
顺便说一下,有362880种排列而不是1680. :)