【发布时间】:2021-04-20 15:13:05
【问题描述】:
我有一个唯一字符串数组,我需要从中创建所有可能的具有相同长度的数组。
String[] str = {"Belgium", "France", "Germany"};
目标是创建一个数组列表,其中每个索引处都有上述数组中的每个可能值,
[Belgium, Belgium, Belgium]
[Belgium, Belgium, France]
[Belgium, Belgium, Germany]
[Belgium, France, Belgium]
[Belgium, France, France]
[Belgium, France, Germany]
[Belgium, Germany, Belgium]
[Belgium, Germany, France]
[Belgium, Germany, Germany]
[France, Belgium, Belgium]
....
[Germany, Germany, France]
[Germany, Germany, Germany]
我创建这个的代码看起来像
static List<String[]> getAllAllocations(String[] input){
List<String[]> result = new ArrayList<>();
if(input.length == 2){
for(int i = 0; i < 2; i++){
for(int j = 0; j < 2; j++){
result.add(new String[]{input[i], input[j]});
}
}
}
else if(input.length == 3){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
for(int k = 0; k < 3; k++){
result.add(new String[]{input[i], input[j], input[k]});
}
}
}
}
else if(input.length == 4){
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
for(int k = 0; k < 4; k++){
for(int m = 0; m < 4; m++){
result.add(new String[]{input[i], input[j], input[k], input[m]});
}
}
}
}
}
//else if(input.length == 5) similar code with 5 for loops
//else if(input.length == 6) similar code with 6 for loops
//else if(input.length == 7) similar code with 7 for loops
//else if(input.length == 8) similar code with 8 for loops
return result;
}
数组将具有 2 到 8 之间的可变长度。如何动态创建 for 循环,而不是链接 if-else 检查或以比我上面所做的更优雅的方式执行此操作?
【问题讨论】:
-
这里的神奇词是递归!
-
@Rocco 我已经尝试过递归,但这很困难,而且我在将字符串添加到现有数组时遇到了问题。我将不胜感激更多输入如何使用递归来解决这个问题