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

Leecode hot100 - 39. 组合总和

题目描述

39. 组合总和 - 力扣(LeetCode)

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

示例 2:

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

示例 3:

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

思路

强推K神的解法,真是神中神

先对候选数组排序,为后续剪枝做准备

定义递归函数backward,参数包括当前组合state、剩余目标值target、候选数组choices、起始索引start和结果集res,终止条件:当剩余目标值为 0 时,将当前组合加入结果

遍历从start开始的候选元素(避免重复组合)

若当前元素大于剩余目标值,直接跳出循环(利用排序特性,后续元素更大)

选择当前元素加入组合,更新剩余目标

递归探索下一层

回溯:移除最后加入的元素,恢复状态

代码

class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:def backward(state:list[int], target:int, choices:list[int], start:int, res:list[list[int]]):# 递归结束的标志,凑齐targetif target == 0:# 把当前结果加入res.append(list(state))return # 遍历所有的选择,从start开始遍历,避免生成重复子集for i in range(start, len(choices)):#若子集和超过 target, 则直接结束循环if target - choices[i] < 0:break# 尝试:做出选择,更新 target, startstate.append(choices[i])# 进行下一轮选择backward(state, target-choices[i], choices, i, res)# 回退:撤销选择,恢复到之前的状态state.pop()# 状态子集,即记录每个符合条件的结果state = []candidates.sort() # 排序,方便计算# 遍历的起始位置start = 0# 存储结果res = []backward(state, target, candidates, start, res)return res

http://www.dtcms.com/a/414580.html

相关文章:

  • 网站建设方案书 广东开发公司成本部职责岗位职责和流程
  • MySQL笔记10
  • Python快速入门专业版(四十八):Python面向对象之多态:不同对象调用同一方法的不同实现(实战案例)
  • C# HttpListener 服务器上无法访问端口
  • [创业之路-605]:半导体行业供应链
  • SpringAOP面向切面编程
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(36):文法運用
  • 郑州做网站茂睿科技全域seo
  • 一阶谓词逻辑及其重要子集对人工智能自然语言处理深层语义分析的影响与启示
  • 平阴县网站建设视频直播网站开发与制作
  • GPTEngineer:AI 驱动的Web应用开发平台
  • STL简介
  • 本地安装Codex,国内直接使用GPT-5-Codex
  • OpenGL ES vs VG-Lite:嵌入式图形渲染引擎对比分析
  • Linux 自定义shell命令解释器
  • 陕西科强建设工程有限公司官方网站重庆企业建站系统模板
  • 【RabbitMQ】原理解析
  • Spring的IoC与DI
  • 做家装的网站有哪些安徽建工集团网站
  • 零知IDE——基于STM32F407VET6和雨滴传感器的多界面TFT降雨监测显示系统
  • 轻松在家构建AI集群,开启智能生活
  • 从PHP入门到公网部署:Web开发与服务器运维实战指南
  • 产品展示网站系统深圳app搭建
  • 40 dubbo和springcloud
  • (26)ASP.NET Core2.2 EF保存(基本保存、保存相关数据、级联删除、使用事务)
  • 西昌新站seo太原网站建设方案开发
  • 永久个人网站网站开发 设计文档
  • 天拓四方集团IoT平台在金属表面处理行业的智能化转型实践
  • 00-1-正则表达式学习心得:从入门到上瘾,再到克制
  • 【性能测试之正则表达式】正则表达式零基础入门:从“抄”到“写”,附性能测试实战案例