Commit c6f8f79c 孙克

找到和为某个数的组合

1 个父辈 adddb51c
package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util; 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.core.device.util.DataCache;
import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CacheNameUtil; import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CacheNameUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component @Component
public class ManualWorkUtil { public class ManualWorkUtil {
...@@ -38,4 +37,41 @@ public class ManualWorkUtil { ...@@ -38,4 +37,41 @@ public class ManualWorkUtil {
return cacheMap.containsKey(boxStr); 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!