在Java中查找数组中元素的所有可能组合

在Java中查找数组中元素的所有可能组合,java,arrays,combinations,Java,Arrays,Combinations,假设我有一个数组:[a,b,c,d]我如何找到每一个可能的组合,即ab,abc,abcd…等等。这需要包含重复的,因此abcd与dcba 其目的是查找所有组合,并检查是否可以从不同的数组中进行相同的组合。我的初步尝试是: for (int i = 0; i < values.length; i++) { String cur = values[i]; for (int k = 0; k < values.length; k++) {

假设我有一个数组:[a,b,c,d]我如何找到每一个可能的组合,即ab,abc,abcd…等等。这需要包含重复的,因此abcddcba 其目的是查找所有组合,并检查是否可以从不同的数组中进行相同的组合。我的初步尝试是:

for (int i = 0; i < values.length; i++) {
        String cur = values[i];

        for (int k = 0; k < values.length; k++) {
            if (i != k) {
                cur = cur.concat(values[k]);
                System.out.println(cur);
            }

        }
    }
这显然是不正确的


这是一个编程挑战,我正在尝试和改进,因此任何关于更快解决方案的建议都会很有帮助

这就是您想要的吗

public static void main(String[] data) {
    ArrayList<Character> chars = new ArrayList<>(4);
    chars.add('a');
    chars.add('b');
    chars.add('c');
    chars.add('d');
    System.out.println(getPermutations("", chars));

}

private static ArrayList<String> getPermutations(String currentResult, ArrayList<Character> possibleChars) {
    ArrayList<String> result = new ArrayList<>(possibleChars.size());
    for (char append: possibleChars) {
        String permutation = currentResult + append; //create a new string with an additional character
        result.add(permutation); //add the permutation to the result
        if (possibleChars.size() > 0) {
            //make a new list with the appendable characters
            ArrayList<Character> possibleCharsUpdated = (ArrayList)possibleChars.clone();
            //from that list, exclude the character we just appended
            possibleCharsUpdated.remove(new Character(append));
            //merge the result of a recursive call of this method and the result we already had
            result.addAll(getPermutations(permutation, possibleCharsUpdated));
        }
    }
    return result;
}
publicstaticvoidmain(字符串[]数据){
ArrayList chars=新的ArrayList(4);
chars.添加('a');
添加字符('b');
添加字符(“c”);
添加字符('d');
System.out.println(getPermutations(“,chars));
}
私有静态ArrayList getPermutations(字符串currentResult,ArrayList possibleChars){
ArrayList结果=新的ArrayList(possibleChars.size());
for(字符附加:可能的字符){
String permutation=currentResult+append;//使用附加字符创建新字符串
result.add(置换);//将置换添加到结果中
如果(可能为cars.size()>0){
//用可追加字符创建一个新列表
ArrayList possibleCharsUpdated=(ArrayList)possibleChars.clone();
//从该列表中,排除刚才附加的字符
删除(新字符(追加));
//合并此方法的递归调用的结果和我们已有的结果
addAll(getPermutations(permutation,possibleCharsUpdate));
}
}
返回结果;
}

Start with->数组是否可能多次包含同一元素?如果数组#1是[a,b,c],数组#2是[b,c,d],两者都包含组合[b,c](和[c,b]),那么这就是已经被认为匹配的吗?这是全部问题,并在底部给出示例输入。我已经实现了匹配,但是我遇到的问题是为每个数组找到可能的组合。我能找到的所有解决方案似乎都提供了答案,其中{a,b,c}与{c,b,a}相同,我特别需要将这两个解决方案视为不同的解决方案,即顺序不完全相同,例如,结果包含dcba,但不包含dcabHmm,对我来说,控制台说“[a、ab、abc、abcd、abd、abdc、ac、acb、acbd、acd、acdb、ad、adb、adbc、adc、adcb、b、ba、bac、bacd、badc、bc、bca、bcd、bcd、bcd、bcda、bd、bda、bdac、cab、cabd、cadb、cadb、cb、cba、cbd、cbd、cbda、cda、cda、cdb、cdb、cdba、d、d、da、dabc、dabc、dac、dac、dac、bda、bda、dba、dba、dca、dca、dcb],其中确实包含dcabYou是对的,我的视力很差,让我看看是否可以在我的程序中实现这一点
public static void main(String[] data) {
    ArrayList<Character> chars = new ArrayList<>(4);
    chars.add('a');
    chars.add('b');
    chars.add('c');
    chars.add('d');
    System.out.println(getPermutations("", chars));

}

private static ArrayList<String> getPermutations(String currentResult, ArrayList<Character> possibleChars) {
    ArrayList<String> result = new ArrayList<>(possibleChars.size());
    for (char append: possibleChars) {
        String permutation = currentResult + append; //create a new string with an additional character
        result.add(permutation); //add the permutation to the result
        if (possibleChars.size() > 0) {
            //make a new list with the appendable characters
            ArrayList<Character> possibleCharsUpdated = (ArrayList)possibleChars.clone();
            //from that list, exclude the character we just appended
            possibleCharsUpdated.remove(new Character(append));
            //merge the result of a recursive call of this method and the result we already had
            result.addAll(getPermutations(permutation, possibleCharsUpdated));
        }
    }
    return result;
}