腾讯面试算法题:序列求和

本文针对腾讯面试中出现的一道算法题进行详细解析,题目要求从一个无重复的候选数字集合中找出所有可能的组合,使得这些组合的元素之和等于给定的目标值。文章提供了一种基于递归的动态规划解决方案,并附带Python实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

腾讯面试算法题:序列求和

题目详情

给一个无重复的候选数字集合C和一个数字target,求和为target的序列,序列中的数都来自于集合C,序列为有序序列。

leetcode 与相关解答
分析
  1. 相当于有放回抽样问题,暴力搜索的复杂度为指数级
  2. 类比维特比算法,可以使用动态规划,将复杂度降低到, O(NK)
  3. 使用递归实现动态规划算法
  4. 确定递归的输入和输出,输入是target和C, 返回的是,寻找到的list的集合。
python实现
def find_child(target, C):
    """
    input:
        target: a int number
        C: a list for search
    return:

    """
    ret = []
    for child_idx in range(len(C)):
        child = C[child_idx]
        if child == target:
            ret.append([child])
        elif child<target:
            ret_list = find_child(target-child, C)
            for child_list_temp in ret_list:
                child_list_temp.append(child)
                ret.append(child_list_temp)
        else:
            pass

    return ret

if __name__ == "__main__":
    target = 8
    C = [2,3, 5]
    ret = find_child(target, C)
    print(ret)

输出

[[2,2,2,2],[3,3,2],[3,2,3],[2,3,3],[5,3],[3,5]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值