[力扣题解]40. 组合总和 II

news/2024/9/23 3:30:51/

题目:40. 组合总和 II

思路

回溯法
(回溯还是很难的,递归不好理解,看着代码很少吧。。。)

代码

class Solution {
public:vector<vector<int>> result;vector<int> path;void function(vector<int>& candidates, int target, int sum, int startindex, vector<bool> used){int i;int size;if(sum == target){result.push_back(path);return;}if(sum > target){return;}size = candidates.size();for(i = startindex; i < size; i++){// used[i-1] == true : path中前面有人使用过;//              false : 有别的path使用过 if(i > 0 && candidates[i] == candidates[i-1] && used[i-1] == false){continue;}used[i] = true;sum += candidates[i];path.push_back(candidates[i]);function(candidates, target, sum, i+1, used);used[i] = false;sum -= candidates[i];path.pop_back();}}vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<bool> used (candidates.size(), false);result.clear();path.clear();sort(candidates.begin(), candidates.end());function(candidates, target, 0, 0, used);return result;}
};

难点在于去重,有2个方面的去重,从搜索树上看,
(1)同一层之间的去重;
(2)不同层之间的去重;
用人话来讲:
(1)之前有路径用过这个元素,但和当前路径无关;
(2)当前路径上用过这个元素;
在代码里面用了used这个变量来辅助去重,按照题目要求,可以出现[1, 1, 6],不能出现[1, 7], [1, 7](即使里面是2个不同的1),所以涉及到是去重情况(1)

无法容忍之前路径上用过同一个元素(可能上述情况(1)(2)两个版本的理解有点不一一对应,总之是这个意思)


http://www.ppmy.cn/news/1457426.html

相关文章

【数据结构】顺序表专题详解(带图解析)

最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;说在前面 &#x1f34b;知识点一&#xff1a;什么是数据结构 • &#x1f330;1.什…

AI烟雾监测识别摄像机:智能化安全防范的新利器

随着现代社会的不断发展&#xff0c;人们对于安全问题的关注日益增加&#xff0c;尤其是在日常生活和工作中&#xff0c;对火灾等意外事件的预防成为了一项重要任务。为了更好地应对火灾风险&#xff0c;近年来&#xff0c;AI烟雾监测识别摄像机应运而生&#xff0c;成为智能化…

视频素材哪个app好?8个视频素材库免费使用

视频内容已成为现代传播中不可或缺的一部分&#xff0c;具备卓越的视频素材对于提升任何媒体作品的质量和吸引力尤为关键。这里列举的一系列精挑细选的全球视频素材网站&#xff0c;旨在为您的商业广告、社交媒体更新或任何其他类型的视觉项目提供最佳支持。 1. 蛙学府&#x…

python from import 有这个文件但找不到路径

可能的问题&#xff1a; 模块文件路径不在Python解释器的搜索路径中 解决办法&#xff1a; 如果模块文件路径/path/abc.py不在Python解释器的搜索路径中&#xff0c;Python解释器会报错ModuleNotFoundError: No module named ‘abc’。这时候我们需要将模块文件路径添加到Pyth…

Springboot 集成 Consul 实现服务注册中心-05

因为后续很多模块都要用到注册中心&#xff0c;所以此处先实现此模块。 Consul简介 Consul是一个开源的服务发现和配置管理工具&#xff0c;具有跨平台、运行高效等特点。它由HashiCorp公司开发&#xff0c;并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康…

python中如何遍历字典

1. 遍历字典的键key ① >>> d{list:[1, 2, 3],1:123,111:python3,tuple:(4, 5, 6)} >>> for key in d:print(str(key):str(d[key])) list:[1, 2, 3] 1:123 111:python3 tuple:(4, 5, 6) ② >>> d{list:[1, 2, 3],1:123,111:python3,tuple:(4, 5, 6…

快速找出存(不存在)在某个(或多个)文件的文件夹

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 想要找出有下面这个文件存在的文件夹 切换到批量文件复制版块&#xff0c;快捷键Ctrl5 右侧&#xff0c;搜索添加 选定范围&#xff0c;勾选搜索文件夹、包…

双均线策略:量化交易中的黄金法则

在量化交易的世界里&#xff0c;双均线策略以其简单、高效而著称。这种策略利用两条不同周期的移动平均线&#xff08;MA&#xff09;来判断市场趋势&#xff0c;是许多交易者入门的不二选择。本文将深入探讨双均线策略的原理&#xff0c;并展示如何在聚宽平台上实现这一策略。…