显然,这几乎是不可能理解的。
那么,这里有一个例子:如果我有一个ArrayList = ["abc", "def"]那么我想要的结果是:
ad ae af
bd be bf
cd ce cf
同样可以假设如果我有一个ArrayList = ["ab", "cd", "efg"]:
ace acf acg
ade adf adg
bce bcf bcg
bde bdf bdg
显示所有选项。第一个索引字符串对应于结果的第一个"潜在"字母。第二个对应第二个,以此类推。我一直在研究不同形式的递归,但我似乎陷入了困境。以下是目前为止的内容:
public static void main(String[] args) {
ArrayList<String> param = new ArrayList<String>();
param.add("jkl");
param.add("mno");
param.add("pqrs");
System.out.println(giveFrag(param, 0));
}
static String giveLetter(String s, int indexForString) {
// return the letter given
return s.substring(indexForString, indexForString+1);
}
static String giveFrag(ArrayList<String> strs, int start) {
String output = "";
if (start == strs.size()-1) {
output = giveLetter(strs.get(start),0);
} else {
for (int i = 0; i < strs.get(start).length(); i++) {
String q = strs.get(start).substring(i,i+1);
output += q;
for (int k = strs.size()-1; k < strs.size(); k++) {
output += giveFrag(strs, start+1);
}
output += " ";
}
output += "n";
}
return output;
}
注意,为了简单起见,我忽略了数组列表的最后一个元素。这可以从giverag()的IF语句中看到。
目前,我的结果如下:
jmp np op
kmp np op
lmp np op
现在,进入真正的问题!首先,如果有人发现任何明显的错误会产生这个结果,而不是:
jmp jnp jop
kmp knp kop
lmp lnp lop
请告诉我。如果没有任何明显的,和整个重组是需要的,你能非常具体的我应该做什么,而不是?
另外,如果有人有额外的时间,他们能找到一种方法在迭代时包含最后一个数组元素吗?
非常感谢您的帮助,很抱歉标题太模糊了。
当前输出与问题描述不匹配。输出的第一行应该是:
jmp jmq jmr jms
实现并没有真正接近您所需要的。可以考虑这样:
private void accumulateFrags(List<String> strings, int start, String prefix, List<String> frags) {
if (start == strings.size()) {
frags.add(prefix);
return;
}
String current = strings.get(start);
for (char c : current.toCharArray()) {
accumulateFrags(strings, start + 1, prefix + c, frags);
}
}
这个函数将把所有的组合累加到一个列表中。像这样调用它:
List<String> frags = new ArrayList<>();
accumulateFrags(Arrays.asList("jkl", "mno", "pqrs"), 0, "", frags);
System.out.println(frags);
这不会产生您想要的逐行输出。但这应该是相当简单的,所以我把它留给你们作为练习
recursive
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
String arr[] = {"jkl", "mno", "pqrs"};
List<String> res = new ArrayList<String>();
constructStr(res, "", 0, arr);
String s = "";
for (int i=0; i<res.size(); i++) {
int mod = arr[arr.length-1].length();
if (i % mod == 0) {
System.out.println(s);
s = res.get(i) + " ";
}
else {
s += res.get(i) + " ";
}
}
System.out.println(s);
}
private static void constructStr(List<String> result, String curStr, int i, String arr[]) {
if (i + 1 < arr.length) {
for (int k=0; k<arr[i].length(); k++) {
constructStr(result, curStr + arr[i].charAt(k), i + 1, arr);
}
}
else {
for (int k=0; k<arr[i].length(); k++) {
result.add(curStr + arr[i].charAt(k));
}
}
}