1
我试图实现这样的事情。动态嵌套for循环使用递归(所有排列)
我有一堆列表。
每个列表都有一定的数字。
我想找到A,B,C列表 这是所有排列:
1,4,6
1,4,7
1,4,8
1,5,6
1,5,7
1,5,8
2,4,6
and so on...
我可以使用循环已经这样做了,但列出的数量不是一成不变的。
所以我尝试使用递归。
这里是我的尝试: 呼叫:
nested(number_of_lists,0, array list of array, current_permutation);
而且功能:
static void nested(int depth, int index, ArrayList< ArrayList<Integer> > list, ArrayList<Integer> curr)
{
if(depth==0)
{
ArrayList <Integer> x = new ArrayList<>();
int i;
for(i=0;i<curr.size();i++)
{
System.out.println(curr.get(i));
x.add(curr.get(i));
}
global.add(x);
curr.remove(curr.size()-1);
}
else
{
for(int i=0;i<list.get(index).size();i++)
{
curr.add(list.get(index).get(i));
nested(depth-1, index+1, list, curr);
if(curr.size()==list.get(index).size())
{
curr.remove(curr.size()-1);
}
if(index==0 &&(curr.size()-1) == i)
curr = new ArrayList<>();
}
}
}
全球是存储了所有排列数组列表的新数组列表。
但是,两个置换与A之后,我得到错误的答案
1 4 6
1 4 7
1 4 8
1 5 6
1 5 7
1 5 8
2 4 6
2 4 7
2 4 8
2 5 6
2 5 7
2 5 8
2 3 4 6
2 3 7
2 3 8
2 5 6
2 5 7
等..
哪里代码做错了。 我的前两个A有两个元素的排列非常好。 对不起,这么长的解释。 一些帮助,将不胜感激。
非常感谢。任何其他方式做或是这是最好的方法? –
您可以进行一些改进。例如,你不需要'index'和'depth',因为它们总是加到'list.size()'。另外,涉及'x'的整个部分可以用'global.add(new ArrayList <>(curr));'替换。最后,尽量避免全局变量。相反,只需在该方法中添加'global'作为参数即可。 –