LeetCode 39. 组合总和
题目描述给定一个无重复元素的整数数组candidates和一个目标整数target找出candidates中可以使数字和为target的所有不同组合。答案可以按任意顺序返回。candidates中的同一个数字可以无限制重复被选取。如果至少一个数字的被选数量不同则两种组合是不同的。例如输入candidates [2,3,6,7], target 7 输出[[2,2,3],[7]]初始思路这题可以使用“选或不选”的回溯模型。定义递归函数dfs(candidates, target, path, i)含义是当前正在考虑candidates[i]在还需要凑出target的情况下继续搜索所有可能组合。每一层有两个选择1. 选当前数字 candidates[i] 2. 跳过当前数字 candidates[i]因为题目允许同一个数字重复选择所以选了candidates[i]之后下一层仍然可以继续考虑candidates[i]。也就是选当前数字dfs(i) 不选当前数字dfs(i 1)解题思路这题和普通子集问题很像但多了一个关键条件同一个数字可以无限制重复被选取。所以当我们选择当前数字后不能直接进入i 1而是继续停留在i。以candidates [2,3,6,7]target 7为例当前考虑 2 选 2 - target 变成 5仍然可以继续选 2 不选 2 - 去考虑 3递归过程可以理解为1. 如果 target 0说明当前 path 的和刚好等于目标值加入答案 2. 如果 target 0说明当前路径已经超过目标值停止 3. 如果 i 越界说明没有数字可以继续考虑停止 4. 选择 candidates[i]递归 dfs(i) 5. 撤销选择递归 dfs(i 1)这里的“撤销选择”非常重要因为path是同一个列表对象选当前数字的分支结束后要恢复现场才能进入“不选当前数字”的分支。代码实现class Solution { ListListInteger ans; public ListListInteger combinationSum(int[] candidates, int target) { ans new ArrayList(); ListInteger path new ArrayList(); dfs(candidates, target, path, 0); return ans; } public void dfs(int[] candidates, int target, ListInteger path, int i) { if (target 0) { ans.add(new ArrayList(path)); return; } if (target 0 || i candidates.length) { return; } path.add(candidates[i]); dfs(candidates, target - candidates[i], path, i); path.remove(path.size() - 1); dfs(candidates, target, path, i 1); } }为什么选了还递归 i这是本题和普通“选或不选”子集题最关键的区别。普通子集问题中每个元素只能使用一次选 nums[i] 后下一层处理 i 1但这题允许重复使用当前数字选 candidates[i] 后下一层仍然处理 i比如目标是7当前数字是2选一次 2 后 target 5 还可以继续选 2 再选一次 2 后 target 3 还可以继续选 2 或跳过 2 去选 3所以递归写成dfs(candidates, target - candidates[i], path, i);而不是dfs(candidates, target - candidates[i], path, i 1);为什么不会产生重复组合这份写法中i只会保持不变或向右移动选当前数i 不变 跳过当前数i 1因此组合中的数字顺序不会回头。比如已经跳过了2进入3后就不会再回头选择2。这样可以避免生成[2,3,2]这类和[2,2,3]本质相同但顺序不同的重复组合。易错点1. dfs 的含义不能写成“把 candidates[i] 加入 path”dfs(i, target)的含义应该是当前考虑 candidates[i]还需要凑出 target“加入当前数”只是其中一个分支不是递归函数本身的含义。2. 选当前数后不能直接 i 1因为同一个数字可以重复选所以选了candidates[i]后下一层还是从i开始。只有在“不选当前数”时才进入i 1。3. 加入答案时要拷贝 path不能直接写ans.add(path);因为path后续还会继续被回溯修改。正确写法是ans.add(new ArrayList(path));4. 回溯后要恢复 path选择当前数字后path.add(candidates[i]);递归结束后要撤销path.remove(path.size() - 1);这样“不选当前数字”的分支才不会受到影响。5. 终止条件要覆盖 target 和 i当target 0时说明找到一个合法组合。当target 0或i candidates.length时说明当前路径不可能继续得到合法答案需要返回。复杂度分析设n candidates.lengthtarget为目标值min为数组中的最小值。递归深度最多约为target / min因为每次选择一个数后target至少会减少min。时间复杂度与最终搜索树规模有关常见估计为指数级。可以粗略理解为O(2^(target / min))量级。空间复杂度O(target / min)主要来自递归栈和path。如果把返回结果也计入空间还要加上所有组合占用的空间。复盘这题的核心不是简单套全排列或子集模板而是先判断当前层的选择模型。对于 39 题最清楚的模型是当前数字选不选如果选因为可以重复使用所以继续停留在当前下标i。如果不选说明当前数字以后都不再考虑进入i 1。只要能想清楚这两个分支代码里的递归方向就不会写乱。Tips组合总和可以记住一句话选当前数继续 dfs(i)跳过当前数dfs(i 1)。这里的i控制候选数字范围target控制还差多少path记录当前已经选择的组合。

相关新闻

MTK平台scatter.txt生成全解析:从分区表原理到自定义实践

MTK平台scatter.txt生成全解析:从分区表原理到自定义实践

1. 项目概述:从芯片到镜像,理解MTK分区表的枢纽在MTK(联发科)平台的Android设备开发中,无论是进行系统定制、固件升级还是深度调试,有一个文件你绝对绕不开,那就是scatter.txt。这个看似普通的文…

2026/8/1 3:49:13 阅读更多 →
ComfyUI-Inpaint-CropAndStitch:终极智能局部修复指南

ComfyUI-Inpaint-CropAndStitch:终极智能局部修复指南

ComfyUI-Inpaint-CropAndStitch:终极智能局部修复指南 【免费下载链接】ComfyUI-Inpaint-CropAndStitch ComfyUI nodes to crop before sampling and stitch back after sampling that speed up inpainting 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-…

2026/8/1 3:49:13 阅读更多 →
2026这6款王炸降AI率网站大起底,一键让AIGC率断崖式下跌!

2026这6款王炸降AI率网站大起底,一键让AIGC率断崖式下跌!

步入 2026 年,学术战场的规则早已悄然改写。曾经只需应对查重率的焦虑,如今已演变为一场关于 AI 痕迹的生死战。随着各大高校全面启用更智能、更精准的 AIGC 检测系统,论文审核的标准也愈发严苛。光是降低重复率已经不够,真正让无…

2026/8/1 3:49:13 阅读更多 →

最新新闻

金融数字化转型中的质量挑战与工程实践

金融数字化转型中的质量挑战与工程实践

1. 金融数字化转型中的质量挑战2008年金融危机后,全球金融业开始了一场静悄悄的革命。我清楚地记得2015年参与某大型银行核心系统改造时,项目组每天要处理上百个数据质量问题。当时一位资深架构师对我说:"数字化不是把纸质流程搬到屏幕上…

2026/8/1 4:32:30 阅读更多 →
LangSmith Fleet技能管理:构建生产级AI Agent的工程化基石

LangSmith Fleet技能管理:构建生产级AI Agent的工程化基石

1. 从LangSmith Fleet到技能管理:一个被低估的Agent核心能力最近在折腾LangChain生态里的各种Agent时,我发现一个挺有意思的现象:大家讨论的焦点往往集中在“哪个模型更聪明”、“Prompt怎么设计”、“工具调用准不准”这些“上层建筑”上&am…

2026/8/1 4:32:30 阅读更多 →
ChatGPT免费模型升级实测:幻觉砍半、记忆增强与回答简洁性深度解析

ChatGPT免费模型升级实测:幻觉砍半、记忆增强与回答简洁性深度解析

1. 从一次“幻觉”引发的对话说起 前几天,我正用ChatGPT帮我梳理一份技术文档的框架。我让它总结几个主流开源项目的架构特点,它讲得头头是道,甚至引用了某个项目“在2023年发布的v5.0版本中采用了全新的微服务拆分策略”。我听着觉得有点不对…

2026/8/1 4:32:30 阅读更多 →
计算机视觉中的OpenCV

计算机视觉中的OpenCV

一、OpenCV的介绍OpenCV(Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软件库,如今,OpenCV 已成为全球最大、使用最广泛的计算机视觉库。二、OpenCV的特点2.1其包含超过 2500 种 经过优化的经典及前沿算…

2026/8/1 4:32:30 阅读更多 →
锚定AI安全基座,深耕垂域智能体落地|通付盾携大群空间LegionSpace亮相2026苏州智博会

锚定AI安全基座,深耕垂域智能体落地|通付盾携大群空间LegionSpace亮相2026苏州智博会

一元复始,万象AI 7月30日,2026年人工智应用博览会在苏州国际博览中心盛大启幕。通付盾携旗下企业级AI智能体工厂大群空间LegionSpace重磅参展,延续WAIC2026世界人工智能大会技术落地成果,以「人工智能安全 垂域超级智能体」核心战…

2026/8/1 4:32:30 阅读更多 →
【Matlab】等离子体物理粒子模拟实现

【Matlab】等离子体物理粒子模拟实现

【Matlab】等离子体物理粒子模拟实现 一、引言 等离子体是由自由电子、带电离子与中性粒子组成的电离气体体系,被称为物质的第四种形态,广泛存在于宇宙空间、大气电离层、核聚变装置、等离子体刻蚀设备、微波放电装置与航空推进系统中。相较于固液气三种常规物质形态,等离…

2026/8/1 4:31:30 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →