You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python编写代码计算给定数字可相加得到目标值的所有组合

需求可行性结论

该需求完全可以实现,你提到的用1、2、3凑出和为6的场景确实存在24种符合要求的组合,可通过回溯算法实现对应功能。

实现思路

这个需求属于可重复选取元素的组合求和穷举问题,实现逻辑如下:

  • 用回溯递归逐层尝试选取数字,每次递归记录当前已选的数字序列、当前累计和
  • 累计和等于目标值时,将当前序列转成字符串存入结果集
  • 累计和超过目标值时直接剪枝返回,减少无效计算
  • 为了避免生成重复排列(例如把123和132判定为两种不同组合,不符合你给出的样例的非降序规则),每次选取数字时仅从当前下标及之后的数字中选择,保证生成的序列都是非降序的,不会出现重复的排列类结果

实现代码

def find_target_combinations(numbers, target_sum):
    result = []
    # 先对数字排序,保证后续生成的序列是非降序的
    numbers.sort()

    def backtrack(start_index, current_total, current_path):
        # 累计和等于目标值,保存结果
        if current_total == target_sum:
            result.append(''.join(map(str, current_path)))
            return
        # 累计和超过目标值,直接剪枝
        if current_total > target_sum:
            return
        # 从start_index开始选数,避免生成重复组合
        for i in range(start_index, len(numbers)):
            select_num = numbers[i]
            current_path.append(select_num)
            backtrack(i, current_total + select_num, current_path)
            # 回溯撤销选择
            current_path.pop()

    backtrack(0, 0, [])
    return result


# 测试你的样例场景
nums = [1, 2, 3]
target = 6
combinations = find_target_combinations(nums, target)

# 逐行输出所有组合
for comb in combinations:
    print(comb)
# 输出总数量验证
print(f"总组合数:{len(combinations)}")

运行验证

代码运行后会输出你给出的样例内容,包括111111、11112、1113、123等所有符合要求的组合,最终打印的总组合数为24,和你描述的场景数据完全匹配。

内容的提问来源于stack exchange,提问作者Abolfazl Malekpour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:24:00