码迷,mamicode.com
首页 > 其他好文 > 详细

组合总和

时间:2021-07-01 16:44:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ret   sublist   can   target   表示   app   nbsp   大于   code   

# 给定一个无重复元素的数组 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)

 

组合总和

标签:ret   sublist   can   target   表示   app   nbsp   大于   code   

原文地址:https://www.cnblogs.com/demo-deng/p/14956602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!