组合总和

# 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 
#
# candidates 中的数字可以无限制重复被选取。
#
# 说明:
#
#
# 所有数字(包括 target)都是正整数。
# 解集不能包含重复的组合。
#
#
# 示例 1:
#
# 输入:candidates = [2,3,6,7], target = 7,
# 所求解集为:
# [
# [7],
# [2,2,3]
# ]

 

方法:回溯

复制代码
def combinationSum(nums, target):
    res = []
    if len(nums) == 0:
        return res    # 返回空list
    nums.sort()     # 来一次排序,便于后续处理
    dfs(nums, [], target, 0, res)   # 深度优先遍历,直接到底,递归回溯
    return res
def dfs(nums, sublist, target, last, res):    # last表示sublist的最后一个元素
    if target == 0:
        res.append(sublist)
    if target < nums[0]:   # 剪枝,小于第一个元素值直接返回
        return
    for each in nums:   # 数字可以重复使用,每次都再次循环遍历
        if each > target:  # 剪枝,当前数字如果大于目标值,后面无需遍历
            return
        if each < last:   # 剪枝操作:若当前数值小于当前sublist的最后一个元素,则继续遍历,防止出现重复解决方案,如[2,2,3],[3,2,2]
            continue
        dfs(nums, sublist+[each], target-each, each, res)
复制代码

 

posted @   今夜无风  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2020-06-30 关键词提取新方法-YAKE! Collection-independent Automatic Keyword Extractor
点击右上角即可分享
微信分享提示