gpt4 book ai didi

java - 使用递归的动态嵌套 for 循环(所有排列)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:38 27 4
gpt4 key购买 nike

我正在尝试实现类似的东西。

我有一堆 list 。

每个列表都有特定的数字。

A - 1,2,3    
B - 4,5
C - 6,7,8

我想找到 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...

我本可以使用 for 循环完成此操作,但列表的数量不是静态的。

所以我尝试使用递归。

这是我尝试过的:调用:

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<>();


}
}

}

Global 是存储了所有排列的数组列表的新数组列表。

但是,在用 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 的两个元素的前两个排列非常好。很抱歉这么长的解释。一些帮助将不胜感激。

最佳答案

您似乎使事情变得比实际情况更复杂。我已经设法通过注释掉你的一些行来纠正这个问题。

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<>();


}
}

}

关于java - 使用递归的动态嵌套 for 循环(所有排列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com