查找给定集合的幂集
Find powersets for a given set
我正在尝试学习如何编码并偶然发现了生成 java 中源集的幂集的问题。
我尝试编写一种方法,该方法 returns 一个双打列表的列表作为双打列表的输入。遗憾的是
的输入
[1.0, 2.0, 3.0]
只有returns
[[], [1.0], [1.0], [1.0, 2.0], [1.0], [1.0, 3.0], [1.0, 2.0], [1.0, 2.0, 3.0]]
所以我的 for 循环一定有问题。在尝试寻找不同的代码排列方式数小时后,我卡住了。有人可以发现我为我犯的错误吗?对于 types/coding 的一般使用情况,我还可以提供一些反馈意见。
非常感谢!
编辑:里面的代码有误
private static List<?> genSubset(List<Double> set, int size){
List<List<Double>> subsets = new ArrayList<List<Double>>();
System.out.println(set);
for (int x=0; x<Math.pow(2,size); x++)
{
List<Double> currentSet = new ArrayList<Double>();
for (int i = 0; i<size; i++){
try {if (Integer.toBinaryString(x).charAt(i)=='1'){
currentSet.add(set.get(i));
}
}
catch (Exception e){}
}
subsets.add(currentSet);
}
return subsets;
}
您没有考虑到字符串的索引是从左侧开始计算的。您需要从二进制字符串的最后一个索引中减去 i。
修复您的代码如下。
private static List<?> genSubset(List<Double> set, int size) {
List<List<Double>> subsets = new ArrayList<List<Double>>();
for (int x = 0; x < Math.pow(2, size); x++) {
List<Double> currentSet = new ArrayList<Double>();
String binString = Integer.toBinaryString(x);
for (int i = 0; i < size; i++) {
if (binString.length() > i && binString.charAt(binString.length()-i-1) == '1') {
currentSet.add(set.get(i));
}
}
subsets.add(currentSet);
}
return subsets;
}
我正在尝试学习如何编码并偶然发现了生成 java 中源集的幂集的问题。 我尝试编写一种方法,该方法 returns 一个双打列表的列表作为双打列表的输入。遗憾的是
的输入[1.0, 2.0, 3.0]
只有returns
[[], [1.0], [1.0], [1.0, 2.0], [1.0], [1.0, 3.0], [1.0, 2.0], [1.0, 2.0, 3.0]]
所以我的 for 循环一定有问题。在尝试寻找不同的代码排列方式数小时后,我卡住了。有人可以发现我为我犯的错误吗?对于 types/coding 的一般使用情况,我还可以提供一些反馈意见。
非常感谢!
编辑:里面的代码有误
private static List<?> genSubset(List<Double> set, int size){
List<List<Double>> subsets = new ArrayList<List<Double>>();
System.out.println(set);
for (int x=0; x<Math.pow(2,size); x++)
{
List<Double> currentSet = new ArrayList<Double>();
for (int i = 0; i<size; i++){
try {if (Integer.toBinaryString(x).charAt(i)=='1'){
currentSet.add(set.get(i));
}
}
catch (Exception e){}
}
subsets.add(currentSet);
}
return subsets;
}
您没有考虑到字符串的索引是从左侧开始计算的。您需要从二进制字符串的最后一个索引中减去 i。 修复您的代码如下。
private static List<?> genSubset(List<Double> set, int size) {
List<List<Double>> subsets = new ArrayList<List<Double>>();
for (int x = 0; x < Math.pow(2, size); x++) {
List<Double> currentSet = new ArrayList<Double>();
String binString = Integer.toBinaryString(x);
for (int i = 0; i < size; i++) {
if (binString.length() > i && binString.charAt(binString.length()-i-1) == '1') {
currentSet.add(set.get(i));
}
}
subsets.add(currentSet);
}
return subsets;
}