0

我想要一个干净的递归函数来生成与

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

但它不起作用(见输出,我没有得到那么多结果)

谢谢

4

1 回答 1

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 ”并传递“loops( j+1 , buf, level+1, k);”

于 2012-05-31T21:04:58.397 回答