【发布时间】:2017-08-02 02:15:40
【问题描述】:
我需要从一个字符串数组/数组列表中构建每个长度 L 的组合,其中 L 大于数组长度
我目前有一个递归方法(不是我自己创建的),只要这些组合比数组短,它就会生成 String[] 的每个组合。
示例/伪代码:
input (2, {A,B,C})
returns {AA, AB, AC, BA, BC, CB, CA}
到目前为止,如果请求的组合长度(示例中为 2)大于 Array 长度(4,5,6...而不是 2),则递归方法射出那个甜蜜的甜蜜 ArrayIndexOutOfBounds 错误。
我需要的是一种方法(递归与否),它将返回数组的每个组合,而不管组合是否比数组本身长。通过在数组中添加更多字母并交叉手指会做得更好,还是有合法的方法来实现这一点?谢谢!
这是我一直在使用的方法。如果你知道功劳在哪里,请说出来,这不是我自己创造的。
public class bizzBam
{
// Driver method to test below methods
public static void main(String[] args) {
System.out.println("First Test");
String set1[] = {"a", "b","c"};
printAllKLength(set1, pointX);
}
// The method that prints all possible strings of length k. It is
// mainly a wrapper over recursive function printAllKLengthRec()
static void printAllKLength(String set[], int k) {
int n = set.length+2;
printAllKLengthRec(set, "", n, k);
}
// The main recursive method to print all possible strings of length k
static void printAllKLengthRec(String set[], String prefix, int n, int length) {
// Base case: k is 0, print prefix
if (length == 0) {
System.out.println(prefix);
return;
}
// One by one add all characters from set and recursively
// call for k equals to k-1
for (int i = 0; i < n; ++i) {
// Next character of input added
String newPrefix = prefix + set[i];
// k is decreased, because we have added a new character
printAllKLengthRec(set, newPrefix, n, length - 1);
}
}
}
(编辑忘了说:) 至少对于这个算法,如果“PointX”大于输入数组的长度,它将返回 indexoutofbounds。
【问题讨论】:
-
难怪它不起作用。
pointX是什么? -
pointX 是您要生成的组合的长度,是吗?如果是这样,请将
int n = set.length+2;更改为int n = set.length;并且您应该很好地将 pointX 设置为值 > 3 -
已经回答了,最好考虑进一步的逻辑stackoverflow.com/questions/4240080/…
-
您的示例似乎不一致。为什么输出中是 AA,而不是 BB 或 CC?
-
@Tavo 抱歉,忘记解释了,已编辑后
标签: java arrays algorithm recursion