1. 如何计算幂集
1.1. 需求
给定三个数字1,2,3 得到 {1,2,3,12,13,23,123,""}等等这些集合
1.2. 什么是幂集
1.3. 代码
1.3.1. 核心
public List<List<String>> powerSet(List<String> set) {
//已知所求集合的幂集会有2^n个元素
int size = 2 << set.size();
List<List<String>> powerSet = new ArrayList<>(size);
//首先空集肯定是集合的幂集
powerSet.add(Collections.emptyList());
for (String element : set) {
//计算当前元素与已存在幂集的组合
int preSize = powerSet.size();
for (int i = 0; i < preSize; i++) {
List<String> combineSubset = new ArrayList<>(powerSet.get(i));
combineSubset.add(element);
powerSet.add(combineSubset);
}
}
return powerSet;
}
1.3.2. 测试
/**
* 打印一下生成的幂集
*/
@Test
public void printData() {
List<String> set = Arrays.asList("1", "2", "3");
List<List<String>> powerSet = powerSet(set);
Console.log("幂集的数量是 = [ {} ]",powerSet.size());
for (List<String> item : powerSet) {
String join = Joiner.on(",").join(item);
System.out.println(join);
}
}
1.3.3. 结果
幂集的数量是 = [ 8 ]
1
2
1,2
3
1,3
2,3
1,2,3