Commit c6f8f79c 孙克

找到和为某个数的组合

1 个父辈 adddb51c
package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util;
import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CacheNameUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Component
public class ManualWorkUtil {
......@@ -38,4 +37,41 @@ public class ManualWorkUtil {
return cacheMap.containsKey(boxStr);
}
public static void findCombinations(List<Integer> numbers, int target) {
// 使用HashMap来存储和值及其对应的组合次数
Map<Integer, List<Integer>> sumCounts = new HashMap<>();
sumCounts.put(0, new ArrayList<>()); // 初始化,和为0的组合有1种(即不选任何数)
for (int num : numbers) {
Map<Integer, List<Integer>> temp = new HashMap<>(sumCounts); // 复制当前的和值映射,避免在迭代过程中修改
for (Map.Entry<Integer, List<Integer>> entry : temp.entrySet()) {
int sum = entry.getKey();
Integer newSum = sum + num;
if (newSum <= target) { // 只考虑不超过target的和
List<Integer> oldValue = new ArrayList<>(entry.getValue());
if(!sumCounts.containsKey(newSum)){
oldValue.add(num);
sumCounts.put(newSum,oldValue);
if(newSum == target){
System.out.println("找到和为 " + target + " 的组合为 " + oldValue +" 共:" + oldValue.size());
return;
}
}
}
}
}
System.out.println(sumCounts.size());
}
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 100; i++) {
numbers.add(1);
}
int target = 101;
findCombinations(numbers, target);
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!