我有一组 N 个组,每个组包含可变数量的元素。我想要一个函数,它将返回所有元素的所有可能排列(长度为 1 到 N),其中每组只有一个元素可以出现在任何排列中。
例如,考虑 2 个组{A, B}
,{C, D, E}
然后我想返回以下列表:
{A}, {B}, {C}, {D}, {E},
{AC}, {AD}, {AE}, {BC}, {BD}, {BE}, {CA}, {CB}, {DA}, {DB}, {EA}, {EB}
我尝试编写一个递归函数,但我似乎无法让它工作......这是我到目前为止所拥有的。任何帮助让它工作将不胜感激。
public class Test {
public static void main(String[] args) {
List<String> g1 = new ArrayList<String>();
g1.add("a");
g1.add("b");
List<String> g2 = new ArrayList<String>();
g2.add("c");
g2.add("d");
g2.add("e");
List<List<String>> groups = new ArrayList<List<String>>();
groups.add(g1);
groups.add(g2);
int size = 2;
List<List<String>> perms = generatePermutations(groups, size);
System.out.println(perms.size());
}
private static List<List<String>> generatePermutations(List<List<String>> groups, int size) {
List<List<String>> permutations = new ArrayList<List<String>>();
if ( groups.size() == 0 ) {
return permutations;
}
int n = groups.size();
for ( int i=0; i<n; i++ ) {
List<List<String>> otherGroups = new ArrayList<List<String>>(groups);
otherGroups.remove(i);
for ( int j=0; j<groups.get(i).size(); j++ ) {
String aKey = groups.get(i).get(j);
for ( List<String> subPerm : generatePermutations(otherGroups, size - 1) ) {
List<String> newList = new ArrayList<String>();
newList.add(aKey);
newList.addAll(subPerm);
permutations.add(newList);
}
}
}
return permutations;
}
}