程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(2)

回溯法-组合总和 II

发布于2019-11-17 16:59     阅读(872)     评论(0)     点赞(14)     收藏(4)


题目描述

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。

说明:

  • 所有数字(包括目标数)都是正整数。
  • 解集不能包含重复的组合。

示例

输入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]

输入: candidates = [2,5,2,1,2], target = 5,
所求解集为: [ [1,2,2], [5] ]

分析

利用回溯法子集树模板,注意这里的判断要大量用到求和,所以利用模板中的01映射会花费大量的时间,这里不用01映射,再加个全局的和变量记录,降低每次求和带来的时间消耗

事实上模板用的01映射只是帮助理解问题,理解后皆可取消模板内的01映射。

代码

class Solution:
    def __init__(self):
        self.data = []
        self.n = 0
        self.tempRes = []
        self.res = []
        self.target = 0
        self.sumNum = 0 
    

    def backtrack(self, k):
        if k>=self.n or self.sumNum >= self.target: 
            if self.sumNum == self.target:
                self.res.append(self.tempRes[:])
                
        else:
            for i in [0, 1]:
                if i==1:
                    data = self.data[k]
                    self.tempRes.append(data)
                    self.sumNum += data
 
                self.backtrack(k+1)
                if i==1:
                    self.tempRes.pop()
                    self.sumNum -= data

    def combinationSum2(self, candidates, target):  
        self.data = sorted(candidates)
        self.n = len(candidates)
        self.target = target

        self.backtrack(0)
        res = list(map(list,set(map(tuple, self.res))))
        return res
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35


所属网站分类: 技术文章 > 博客

作者:放羊人

链接:https://www.pythonheidong.com/blog/article/158332/920840c5f9522c2e8cc4/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)