我希望有一个干净的递归函数来生成与
相同的结果static List<String> l, out;
l=new ArrayList<String>();
l.add("A");l.add("B");l.add("C");l.add("D");l.add("E");l.add("F");
for (int i = 0; i < l.size(); i++) {
for (int j = i+1; j < l.size(); j++) {
for (int k = j+1; k < l.size(); k++) {
for (int t = k+1; t < l.size(); t++) {
StringBuffer buffer = new StringBuffer(50);
buffer.append(l.get(i));
buffer.append(l.get(j));
buffer.append(l.get(k));
buffer.append(l.get(t));
out.add(buffer.toString());
}
}
}
}
这里有4个级别,例如
我试了一下http://pastebin.com/auSxQMHt
但它不起作用(参见输出,我得不到那么多结果)
THX
答案 0 :(得分:0)
试试这个,你的索引是一个:
private static final void loops(int i, StringBuffer buffer, int level, int k, int size) {
if (level>=k){
out.add(buffer.toString());
} else {
for (int j = i; j < size; j++) {
StringBuffer buf = new StringBuffer(buffer);
buf.append(l.get(j));
loops(j+1, buf, level+1, k, size);
}
}
}
... main() ...
int size = l.size();
loops(0, new StringBuffer(50), 0, 4, size);
... main() ...
结果如下:
p1: 194580 duration:334 ms
p2: 194580 duration:370 ms
不使用“int j = i + 1 ”而是使用“int j = i ”并传递“循环( j + 1 > ,buf,level + 1,k);“