gpt4 book ai didi

java - 如何找到不包括自己数组的字符串数组的排列?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:37 27 4
gpt4 key购买 nike

我有以下一堆数组:

public class ArrayPermutationExample {
private static final String PREFIX = "ignore(FAILURE) { build(\"load\", ";
public static final String ENDING = ")}";
private static String[] arr_1 = new String[] {
"111",
"222",
"333"};

private static String[] arr_2 = new String[]{
"aaa",
"bbb",
"ccc"};

private static String[] arr_3 = new String[] {
"***",
"&&&",
"$$$"};

我需要找到与其他数组的排列,不包括 native 数组。
输出应如下所示:

111aaa
111bbb
111ccc
111***
111&&&
111$$$

222aaa
222bbb
222ccc
...

333aaa
333bbb
333ccc
...

最后,对于所有这些排列,都应添加prefixending:

prefix permutation string endings

最后我们应该有这样的东西:

ignore(FAILURE) { build("load", 111aaa )}

我完全坚持这个任务的解决方案:

private static void processArrays(String[] ... arrays) {
ArrayList<String> result = new ArrayList<>();
for (String[] array : arrays) {
String[] currentArray = array;
for (String line : currentArray) {
// exclude all lines from current array & make concatenation with every line from others
}
}
}

如何解决这个问题?

更新:

最后我想补充一点,我们需要有一个没有任何重复的独特列表。即使是下面的例子也会相互重复:

111aaa***
***111aaa

我相信这个任务应该有一个Java 8风格的解决方案。

最佳答案

我认为这可能是一个组合,因为您实际上并不关心获取所有顺序(除了按照数组参数的顺序指定的顺序打印),但无论如何,这是我编写的代码。我使用堆栈来存储未完成的数组。将每个数组在任何给定点的每种可能性推送到堆栈,并推送到任何已完成数组的结果。

public static List<String> getCombinations(String prefix, String ending, String[]... arrays) {
List<String> results = new ArrayList<>();
Stack<String[]> combinations = new Stack<>();
combinations.add(new String[arrays.length]);

while (!combinations.isEmpty()) {
String[] currentArray = combinations.pop();

if (currentArray[arrays.length - 1] == null) {
for (int i = 0; i < arrays.length; i++) {
if (currentArray[i] == null) {
for (int j = 0; j < arrays[i].length; j++) {
String[] newArray = currentArray.clone();
newArray[i] = arrays[i][j];
combinations.add(newArray);
}

break;
}

}
} else {
StringBuilder stringBuilder = new StringBuilder(prefix);
for (String string : currentArray) {
stringBuilder.append(string);
}
stringBuilder.append(ending);
results.add(stringBuilder.toString());
}
}

return results;
}

您只需遍历返回的列表即可打印出所有字符串。

作为补充说明,此方法可以递归编写,但我通常喜欢尽可能使用堆栈而不是使用递归,因为递归有时可能很慢。

关于java - 如何找到不包括自己数组的字符串数组的排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45223419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com