显然,这几乎是不可能理解的。
所以,这是一个例子: 如果我有一个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
显示所有选项。第一个索引String对应于结果的第一个“潜在”字母。第二个对应于第二个,依此类推。我一直在研究不同形式的递归,但我似乎遇到了一个漏洞。以下是我到目前为止的情况:
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;
}
请注意,为了简单起见,我忽略了ARRAYLIST的最后一个元素。这可以在giveFrag()的IF声明中看到。
目前,我的结果如下:
jmp np op
kmp np op
lmp np op
现在,到实际的问题!首先,如果有人发现任何会产生这种结果的明显错误而不是:
jmp jnp jop
kmp knp kop
lmp lnp lop
请告诉我。如果没有任何明显的重组,并且需要整个重组,那么请您具体说明我应该做什么呢?
另外,如果有人有任何额外的时间,他们是否可以在迭代时找到包含最后一个数组元素的方法?
非常感谢你的帮助,并对这个令人难以置信的模糊标题感到抱歉。
答案 0 :(得分:0)
当前输出与问题描述不符。 输出的第一行应该是:
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);
这不会产生您想要的逐行输出。 但这应该是相当简单的, 所以我把它作为锻炼给你。
答案 1 :(得分:0)
递归
// 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));
}
}
}