java 枚举组合_java – 查找所有可能的枚举组合

算法的复杂性是O(NxMxK …. xZ),如果我错了,我不知道它是否是一种“有效的方式”….我用它作为一种回溯解决方案

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class ProductEnums {

public enum EnumOne {

One,

OneMore;

}

public enum EnumTwo {

Two,

}

public enum EnumThree {

Three,

ThreeMore;

}

public static void main(String[] args) {

// pass each values in enums

List a = product(EnumOne.values(),

EnumTwo.values(), EnumThree.values());

System.out.println(a);

}

public static List> product(Enum[]... enums) {

return product(new ArrayList<>(Arrays.asList(enums)));

}

public static List> product(List enums) {

if (enums.isEmpty()) {

//Trivial case of recursive function

return new ArrayList<>();

}

//remove first element

Enum[] myEnums = enums.remove(0);

List> out = new ArrayList<>();

for (Enum e : myEnums) {

//call recursive

List> list = product(enums);

for (List list_enum : list) {

//for each list get from recursion adding element e

list_enum.add(0, e);

out.add(list_enum);

}

if(list.isEmpty()){

List list_enum = new ArrayList<>();

list_enum.add(e);

out.add(list_enum);

}

}

enums.add(0, myEnums); //Backtraking

return out;

}

}

结果

[[One, Two, Three], [One, Two, ThreeMore], [OneMore, Two, Three], [OneMore, Two, ThreeMore]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值