当前位置: 首页 > news >正文

【leetcode100】组合总和Ⅱ

1、题目描述

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次 。

注意:解集不能包含重复的组合。 

示例 1:

输入: candidates = [2,5,2,1,2], target = 5,
输出:
[
[1,2,2],
[5]
]

2、初始思路

2.1 思路

根据题目要求,每个数字在每个组合里只能用一次,也就是说,在每一支上,candidates中的数字都能取,但只能取一次;而且结果里不能有重复的组合,也就是说在每一层,当一个数取过之后,在candidates中与之数值相同的数字都不能再选取。因此,可以将本题的树状图抽象为:

2.2 代码

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        candidates.sort()
        res = []
        path = []
        def backtracking(candidates, target, startIndex):
            if target == 0:
                res.append(path.copy())
                return
            for i in range(startIndex, len(candidates)):
                #当取得数大于target时,说明该组合已经不成立,可直接跳出循环
                if candidates[i] > target:
                    break
                #当一层中已经去过相同数值后,该数值不再被选取;但要注意在同一支中可从candidates中任选不重复的数值,因此需要用i > startIndex加以限制
                if i > startIndex and candidates[i] == candidates[i-1]:
                    continue
                path.append(candidates[i])
                backtracking(candidates, target - candidates[i], i+1 )
                path.pop()
        backtracking(candidates, target, 0)
        return res

相关文章:

  • 清华大学08-使用DeepSeek赋能家庭教育【文末附下载地址】
  • Python绘制数据分析中经典的图形--列线图
  • 【接口负载】✈️整合 Resilience4j 指定接口负载,避免过载
  • 蓝牙4.0BLE协议栈中串口应用详解
  • [HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(1)知识基础
  • Ollama在AutoDL部署,CPU服务器做代理,实践中
  • 基于SpringBoot的智能问诊系统设计与隐私保护策略
  • ChatGPT使用经验分享
  • Android MVC、MVP、MVVM三种架构的介绍和使用。
  • 蓝桥杯 C++ b组 积木画深度解析
  • 【算法day4】最长回文子串——动态规划方法
  • JAVA通过SSE实现消息推送
  • 【Elasticsearch入门到落地】9、hotel数据结构分析
  • SAP监控体系和机制
  • 【Go每日一练】统计字符出现的次数
  • 【python爬虫】酷狗音乐爬取练习
  • Manus详细介绍
  • 复现 MODEST 机器人抓取透明物体 单目 ICRA 2025
  • 【编译器】VSCODE编译C语言
  • 如是APP:AI精准匹配需求,信用体系重构信任,双轮驱动打造无套路电商
  • 建站之星极速版/广告公司推广方案
  • 香港人做evus在哪个网站/长春百度seo排名
  • 网泰网站建设网络推广/如何推广产品
  • 网站接入服务单位名称/南宁优化网站网络服务
  • 运城网站建设多少钱/百度百度一下就知道
  • 蓝色政府网站模板/自媒体平台注册入口