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

Leetcode40: 组合总和 II

题目描述:

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

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

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

代码思路:

  1. 排序
    • 首先,对 candidates 数组进行排序。排序的目的是为了后续能够方便地处理重复元素,并且有助于提前终止搜索(当当前数字已经大于剩余需要达到的目标值时)。
  2. 初始化结果列表
    • 创建一个空列表 ans,用于存储所有满足条件的组合。
  3. 定义回溯函数
    • find(s, use, remain) 是一个递归函数,用于寻找所有可能的组合。
      • s 是当前搜索的起始索引,用于避免重复使用数组中的同一个元素。
      • use 是当前已经选择的数字列表(组合)。
      • remain 是当前还需要达到的目标值。
  4. 回溯逻辑
    • 遍历从索引 s 到数组末尾的每个元素。
    • 如果当前元素与前一个元素相同(i > s and candidates[i-1] == candidates[i]),则跳过当前循环迭代,以避免重复组合。
    • 如果当前元素等于剩余目标值 remain,则将当前组合 use + [c] 添加到结果列表 ans 中,并返回(结束当前递归路径)。
    • 如果当前元素小于剩余目标值 remain,则递归调用 find 函数,更新起始索引为 i+1(因为当前元素已被使用),更新已使用的数字列表为 use + [c],更新剩余目标值为 remain - c
    • 如果当前元素大于剩余目标值 remain,则直接返回(结束当前递归路径,因为后续元素只会更大,无法再达到目标值)。
  5. 启动回溯
    • 调用 find(0, [], target) 开始回溯过程,初始时起始索引为 0,已使用的数字列表为空,剩余目标值为 target
  6. 返回结果
    • 最后返回结果列表 ans,其中包含了所有满足条件的独特组合。

代码实现:

class Solution:def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:candidates.sort()ans = []def find(s,use,remain):for i in range(s,len(candidates)):c = candidates[i]if i>s and candidates[i-1]==candidates[i]:continueif c == remain:ans.append(use + [c])return              if c < remain:find(i+1,use + [c], remain - c)if c > remain:returnfind(0,[], target)return ans

http://www.lryc.cn/news/527242.html

相关文章:

  • win32汇编环境,对话框程序中使用进度条控件
  • AIGC时代下的Vue组件开发深度探索
  • 在Kubernets Cluster中部署LVM类型的StorageClass - 上
  • 一次StarRocks分析的经历
  • Django网站搭建流程
  • Vue-day2
  • Day44:列表元素的修改
  • 在 AMD GPU 上使用 vLLM 的 Triton 推理服务器
  • day7手机拍照装备
  • HarmonyOS:创建应用静态快捷方式
  • [SUCTF 2018]MultiSQL1
  • kafka-部署安装
  • VUE3 使用路由守卫函数实现类型服务器端中间件效果
  • |Python新手小白中级教程|第二十九章:面向对象编程(Python类的拓展延伸与10道实操题目)(5)
  • 项目概述与规划 (I)
  • mysql学习笔记-数据库的设计规范
  • 实现B-树
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)
  • C# 中 default 使用详解
  • Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?
  • 电力晶体管(GTR)全控性器件
  • C语言------指针从入门到精通
  • 网络安全大模型和人工智能场景及应用理解
  • 大模型正确调用方式
  • rocketmq原理源码分析之控制器模式- dledger
  • Deployment 部署 Pod 流程
  • 塔罗牌(基础):大阿卡那牌
  • TCP/IP 协议:互联网通信的基石
  • Python 之 Excel 表格常用操作
  • 2025春招 SpringCloud 面试题汇总