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,b​​c,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

注意到您有两个 for 循环,但实际上只需要一个即可从 AZ 获取所有可能的组合。但是您列出的组合并不是字符串的所有可能组合。

这样的可能性是 a , ab , ac, abc , acb, b, ba, bc , bac , bca , c, ca , cb , cba, cab

由于您决定围绕 for 循环构建您的程序,答案在于您需要第三个循环来处理三个字符而不是两个字符,但是对于您的程序目标没有明确的目标,我无法重新-写一个例子。

我建议您重新开始,在使用代码来感受语法的同时,尝试在您的示例中更有效地编写代码。original_size 是一个无用的变量,例如,您可以只使用 s.length。

于 2013-01-02T02:04:06.033 回答