【问题标题】:Finding every possible combination of elements in an array in Java在 Java 中查找数组中所有可能的元素组合
【发布时间】:2017-02-20 20:06:52
【问题描述】:

假设我有这个数组:[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);
            }

        }
    }

哪个给出输出:

ab
abc
abcd
ba
bac
bacd
ca
cab
cabd
da
dab
dabc

这显然是不正确的

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

【问题讨论】:

  • 数组是否有可能多次包含相同的元素?如果数组 #1 是 [a, b, c] 并且数组 #2 是 [b, c, d] 都包含组合 [b, c] (和 [c, b]),那么这是否已经被视为匹配?
  • open.kattis.com/problems/correspondence 这是完整的问题,并在底部给出示例输入。我已经实现了匹配,但我遇到的问题是找到每个数组的可能组合。我能找到的所有解决方案似乎都提供了 {a,b,c} 与 {c,b,a} 相同的答案,我特别需要将这两者视为不同,即顺序很重要

标签: java arrays combinations


【解决方案1】:

这就是你要找的吗?

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;
}

【讨论】:

  • 不完全,例如结果包含dcba但不包含dcab
  • 嗯,对我来说,控制台说“[a,ab,abc,abcd,abd,abdc,ac,acb,acbd,acd,acdb,ad,adb,adbc,adc,adcb,b , ba, bac, bacd, 坏, badc, bc, bca, bcad, bcd, bcda, bd, bda, bdac, bdc, bdca, c, ca, cab, cabd, cad, cadb, cb, cba, cbad, cbd , cbda, cd, cda, cdab, cdb, cdba, d, da, dab, dabc, dac, dacb, db, dba, dbac, dbc, dbca, dc, dca, dcab, dcb, dcba]”,其中确实包含dcab
  • 你说得对,我的眼力很差,让我看看能不能在我的程序中实现这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2023-04-10
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多