我有以下一堆数组:
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[] {
"***",
"&&&",
"$$$"};
我需要找到其他数组的排列,排除原生数组 输出应如下所示:
111aaa
111bbb
111ccc
111***
111&&&
111$$$
222aaa
222bbb
222ccc
...
333aaa
333bbb
333ccc
...
最后,对于所有这些排列,应添加prefix
和ending
:
prefix
排列字符串endings
最后我们应该有:
忽略(失败){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 风格的解决方案。
答案 0 :(得分:2)
我认为这可能是一个组合,因为你实际上并不关心获得所有的排序(除了按照数组参数的顺序指定的顺序打印),但不管怎样,这是我写的代码。我使用堆栈来存储未完成的数组。在任何给定点为每个阵列推送堆栈,并推送到任何已完成阵列的结果。
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;
}
您只需要遍历返回的列表即可打印出所有字符串。
作为补充说明,此方法可以递归编写,但我通常喜欢使用堆栈而不是使用递归,因为递归有时会很慢。
答案 1 :(得分:1)
我读它的方式:第一个数组arr_1预先添加到接下来的3个数组中。 我认为前缀是&#34;忽略(FAILURE){build(&#34; load&#34;,&#34;结尾是&#34;}}&#34;
$(document).ready(function(){
for(var i = 0; i <= 255; i++){
$('.grid').append('<div class="pixel"></div>');
};
clickDraw();
draw();
});
var drawOn = this.false;
var clickDraw = function(){
$('.grid').click(function(){
$(drawOn).toggle();
});
}
var draw = function(){
if (drawOn === true){
$('.pixel').mouseenter(function(){
(this).css("background-color", "black");
});
}
}