|
@@ -30,6 +30,7 @@ import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
@@ -769,5 +770,32 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 贪心算法 递归组合
|
|
|
+ * @param total
|
|
|
+ * @param value
|
|
|
+ * @param resultMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Map<Integer, List<Integer>> GreedyAlgorithmRecursion(int total, List<Integer> value, Map<Integer, List<Integer>> resultMap) {
|
|
|
+ if (value.size() == 0 || resultMap.containsKey(total)) {
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+ int result = 0;
|
|
|
+ List<Integer> list = new ArrayList<>();
|
|
|
+ int temp = total;
|
|
|
+ for (int i = value.size() - 1; i >= 0; i--) {
|
|
|
+ if (temp >= value.get(i)) {
|
|
|
+ temp -= value.get(i);
|
|
|
+ if (temp >= 0) {
|
|
|
+ list.add(i);
|
|
|
+ result += value.get(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultMap.put(result, list);
|
|
|
+ return GreedyAlgorithmRecursion(total, value.stream().limit(value.size() - 1).collect(Collectors.toList()), resultMap);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|