import java.util.ArrayList;
public class Testing {
public static void main(String[] args) {
ArrayList<Double> valid = new ArrayList<Double>();
ArrayList<Double> result = new ArrayList<Double>();
valid.add(0.05);
valid.add(0.05);
valid.add(0.1);
getSum(valid, result, 0, 0);
System.out.println(result);
}
public static void getSum(ArrayList<Double> valid, ArrayList<Double> result, int start, double sum) {
if (valid.size() == start) {
result.add(sum);
return;
}
double value = sum + valid.get(start);
getSum(valid, result, start + 1, value);
getSum(valid, result, start + 1, sum);
}
}
我甚至不想将重复项输入到结果arrayList中,因为删除重复项会导致内存不足,因为结果arrayList太快太快了。我该怎么做?
答案 0 :(得分:0)
使用接口可提供更强的代码通用性, 在java 8中,您可以使用stream和method distinct():
List<Double> valid = new ArrayList<>();
valid.add(0.05);
valid.add(0.05);
valid.add(0.1);
List<Double> removedDuplicates = valid.stream().distinct().collect(Collectors.toList());
答案 1 :(得分:0)
我最终使用了一个集合而不是像Kon和Sam_ferree建议的ArrayList。最终工作:
import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;
public class Testing {
public static void main(String[] args) {
ArrayList<Double> valid = new ArrayList<Double>();
Set<Double> result = new TreeSet<Double>();
valid.add(0.05);
valid.add(0.05);
getSum(valid, result, 0, 0);
System.out.println(result);
}
public static void getSum(ArrayList<Double> valid, Set<Double> result, int start, double sum) {
if (valid.size() == start) {
result.add(sum);
return;
}
double value = sum + valid.get(start);
getSum(valid, result, start + 1, value);
getSum(valid, result, start + 1, sum);
}
}
答案 2 :(得分:-1)
使用Set而不是List,如HashSet或TreeSet
根据定义设置不允许重复,因此更改该数据类型是您的代码所需的唯一更改。