1、要找出一组数中所有可能的组合,使得这些数的和等于特定的数值(在这个例子中是20),是一个组合优化问题,通常可以通过回溯算法来解决
def find_combinations(numbers, target_sum):
result = []
def backtrack(remaining_sum, combo, index):
# 如果剩余和为0,找到了一个解
if remaining_sum == 0:
result.append(list(combo))
return
# 如果剩余和小于0或没有数字可以添加了,停止当前路径的搜索
if remaining_sum < 0 or index >= len(numbers):
return
# 不包括当前数字,继续搜索
backtrack(remaining_sum, combo, index + 1)
# 包括当前数字,继续搜索
combo.append(numbers[index])
backtrack(remaining_sum - numbers[index], combo, index + 1)
combo.pop() # 回溯,移除当前数字
backtrack(target_sum, [], 0)
return result
# 示例数据
numbers = [1,2,3,4,5,6,7,8]
target_sum = 20
# 找出所有组合
combinations = find_combinations(numbers, target_sum)
# 打印结果
for combo in combinations:
print(combo)
2、运行结果: