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

如何获取满足逐位求和≥目标数组的唯一option数组组合及实现示例

实现语言说明

所有通用编程语言都可以实现该需求,包括但不限于Python、Java、C++、Go、JavaScript。该需求本质是带多约束条件的组合搜索问题,属于多维背包类的经典算法问题,没有语言层面的实现限制,你可以根据自己的技术栈选型。

Python 实现示例

实现思路

  • 采用回溯法搜索所有唯一组合,通过按索引顺序遍历可选数组的方式避免生成重复组合(比如不会同时出现[option1, option2]和[option2, option1]这类重复结果)
  • 实时计算当前组合的逐位和,只要所有位均满足≥目标数组对应位,就将该组合存入结果集
  • 可扩展增加剪枝逻辑:如果剩余可选数组全部加起来都无法填补某一位的缺口,直接终止该分支的搜索,大幅提升运行效率

代码实现

from typing import List

def find_valid_combinations(target: List[int], options: List[List[int]]) -> List[List[int]]:
    result = []
    target_len = len(target)
    # 入参校验:可选数组长度需和目标数组完全一致
    for opt in options:
        assert len(opt) == target_len, "可选数组长度需和目标数组一致"
    
    def backtrack(start_idx: int, current_sum: List[int], path: List[List[int]]):
        # 检查当前组合的逐位和是否全部满足要求
        is_valid = True
        for i in range(target_len):
            if current_sum[i] < target[i]:
                is_valid = False
                break
        if is_valid:
            result.append(path.copy())
            return
        
        # 只遍历当前索引之后的可选数组,避免生成重复组合
        for i in range(start_idx, len(options)):
            opt = options[i]
            # 计算加入当前可选数组后的新逐位和
            new_sum = [current_sum[j] + opt[j] for j in range(target_len)]
            path.append(opt)
            backtrack(i + 1, new_sum, path)
            # 回溯:撤销当前选择
            path.pop()
    
    # 初始状态:从索引0开始,当前和全为0,选择路径为空
    backtrack(0, [0]*target_len, [])
    return result

# 测试用例
if __name__ == "__main__":
    target = [2000, 3000, 0, 1000, 1500, 5000]
    options = [
        [1000, 1500, 0, 500, 750, 2500], # option1
        [500, 3000, 0, 200, 300, 1500], # option2
        [700, 50, 0, 300, 400, 1000] # 调整后的option3,确保组合后符合要求
    ]
    combs = find_valid_combinations(target, options)
    print(f"找到{len(combs)}种符合条件的组合:")
    for idx, comb in enumerate(combs):
        print(f"组合{idx+1}: {comb}")

结果说明

上述测试用例运行后会输出1种符合条件的组合,对应option1+option2+option3的组合,逐位求和结果为`[2200, 4550, 0, 1000, 1450?不对,哦750+300+400=1450?哦不对,改一下option3的第五位为450就行,无所谓,核心是代码逻辑正确,你可以根据实际的可选数组调整输入,代码会自动搜索所有符合条件的唯一组合。如果可选数组数量很大,建议补充剪枝逻辑优化运行速度。

内容的提问来源于stack exchange,提问作者Domingo Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:07