-1

与えられた文字列配列

String[] values = {"A", "B", "C", "D", "E"};

と定数

 final String X = "X";

値の配列に0個以上のXを含めることができるすべての可能な方法を生成します

すなわち

    [A, B, C, D, E]
    [A, X, X, D, E]
    [A, B, X, D, E]
    [X, X, X, X, X]

など、あらゆる可能性があります。高速である必要があります-頭の体操のビット私は効率的にするのに苦労しています。思ったほど簡単ではありません。

4

1 に答える 1

1

答えはヨアヒムザウアーのヒントにありました:

      String[] values = {"A", "B", "C", "D", "E"};
    final String ONE = "1";
    final String X = "X";
    int control=0;
    StringBuilder sb = new StringBuilder(values.length);
    String copy[];
    int count = Integer.parseInt(new String(new char[values.length]).replace("\0", ONE), 2) ;
    while (control <= count) {
        sb.delete(0, sb.length());
        sb.append(String.format("%" + values.length  + "s", Integer.toBinaryString(control++)).replace(' ', '0'));
        copy = values.clone();
        for (int x = 0; x < sb.length(); x ++) {
            if (sb.substring(x, x+1).equals(ONE)) {
                copy[x] = X;
            }
        }
       System.out.println(control + " " + Arrays.toString(copy));
       map.put(generateHashCode(copy),copy.clone());
    }


    System.out.println(map.values().size());
于 2012-09-18T18:14:55.083 に答える