0
public static void combinations(String s) {
    char[] original = s.toCharArray();
    int original_size = s.length();

    String temp = new String();
    for (int i = 0; i < original_size; i++) {// add the first element
        String sb = "";
        temp = "";
        sb = "" + original[i];
        temp = sb.toString();

        System.out.println(sb);
        for (int j = i + 1; j < original_size; j++) {// add the other
                                                        // element in the
                                                        // array
            if (i == j)
                continue;
            sb = temp + "" + original[j];
            System.out.println(sb);
        }
        // sb = "";
    }
}

public static void main(String[] args) {
    combinations("abc");
}

結果は次のようになります: a、ab、ac、abc、b、bc、c

しかし、私のプログラムは、a、ab、ac、b、bc、c です。abc を印刷できません

4

2 に答える 2

1

出力が必要な場合a, ab, ac, abc, b, bc, cは、実際にはすべての文字の組み合わせではなくcacbなども含まれている必要があります。組み合わせを見つけようとしていると思いますが、文字列の順序で指定されています。以下のアプローチは、あなたがやろうとしていることを見つけることができます。呼び出すだけorderedCombinations("abc")です。

public static void orderedCombinations(String s) {
    for(int i = 0; i < s.length(); i++) {
        for(String s1 : subStrings(s.substring(i + 1))) {
            System.out.println(s.charAt(i) + s1);
        }
    }
}

public static String[] subStrings(String s) {
    ArrayList<String> strs = new ArrayList<String>();
    strs.add("");
    for(int i = 0; i < s.length(); i++) {
        for(int j = i + 1; j < s.length() + 1; j++)
            strs.add(s.substring(i, j));
    }

    return strs.toArray(new String[0]);
}
于 2013-01-02T01:47:40.437 に答える
0

2 つの for ループがあることに気付きましたが、AZ からすべての可能な組み合わせに実際に必要なのは 1 つだけです。ただし、リストした組み合わせは、文字列のすべての可能な組み合わせではありません。

そのような可能性は、 a 、 ab 、 ac 、 abc 、 acb 、 b 、 ba 、 bc 、 bac 、 bca 、 c 、 ca 、 cb 、 cba 、 cab です。

forループを中心にプログラムを構築することにしたので、答えは、2文字だけではなく3文字の3番目のループが必要であるという事実のどこかにありますが、プログラムの目標が何であるかについての明確な目的がなければ、私はやり直すことができません-例を書いてください。

最初からやり直すことをお勧めします。コードをいじって構文の感触をつかむのは問題ありませんが、例をより効率的に記述してみてください。たとえば、original_size は役に立たない変数です。単に s.length を使用できます。

于 2013-01-02T02:04:06.033 に答える