Combination Sum II
1 解析
这道题是则就是上一道题的进阶版,此题可以出现相同的元素,例如[1 1 1 7] 目标值为8,那么难点就在于如何去除重复的情况,只保留[1 7]这种情况.
2 思路
都是采用DFS求解,思路和上一题没什么区别,主要在于如何解决重复元素的问题,通常都采用这种模型去重,即先将数组进行排序,搜索的时候,每次将当前元素和上一个元素进行比较,若相同,往下搜索下一个元素,为了防止将第一次出现的元素也过滤掉,会从该元素出现的第二个位置开始.
注意:一定要在有序的数列情况下,才能采用这种模型
if (i > pos && candidates[i] == candidates[i-1]) continue;
class Solution {
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { vector<vector<int>> result;if (target == 0 || candidates.empty() || (candidates.size() == 1 && target != candidates[0])) return result;vector<int> result_set; sort(candidates.begin(), candidates.end());DFS(result, result_set, candidates, target, 0);return result;}void DFS(vector<vector<int>>& result, vector<int> result_set, vector<int>& candidates, int target, int pos){if (target < 0) return;else if (target == 0) result.push_back(result_set);for (int i = pos; i < candidates.size() && candidates[i] <= target; ++i){ if (i > pos && candidates[i] == candidates[i-1]) continue; //去掉重复的元素result_set.push_back(candidates[i]);DFS(result, result_set, candidates, target - candidates[i], i + 1);result_set.pop_back(); }}
};
Combination Sum II相关推荐
- 40. Combination Sum II 组合总和 II
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...
- Combination Sum 和Combination Sum II
这两道题的基本思路和combination那一题是一致的,也是分治的方法. 其中combination Sum复杂一点,因为每个数可能用多次.仔细分析下,本质上也是一样的.原来是每个数仅两种可能.现在 ...
- 递归/回溯:Combination Sum II数组之和
问题如下: 已知一组数(其中有重复元素),求这组数可以组成的所有子集中,子 集中的各个元素和为整数target的子集,结果中无重复的子集. 例如: nums[] = [10, 1, 2, 7, 6, ...
- C#LeetCode刷题之#40-组合总和 II(Combination Sum II)
目录 问题 示例 分析 问题 该文章已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3666 访问. 给定一个数组 candidates ...
- 40. Combination Sum II
避免这个循环的重复 所以i>position && nums[i] == nums[i-1] 1 class Solution { 2 List<List<Integ ...
- 40. Combination Sum II **
description: 给定target, 求给定数列中找到几个数(其中的数不可以重复使用,且一组数有几个也不做限制)的和为target,和上面那个题一毛一样的,就改一下下标就行了,背下来背下来背下 ...
- 【DFS】LeetCode 40. Combination Sum II
Solution1:我的答案 同39题.DFS时间复杂度O(2n)O(2n)O(2^n),空间复杂度O(kn)O(kn)O(kn),k是最终答案的数量,n是元素个数 去重,用set,比较偷懒的做法 c ...
- LeetCode40 Combination Sum II 解析
详细见:leetcode.com/problems/combination-sum-ii C和Python的去重算法,应该记住. Java是很久之前写的,并不好. 规则是:相同数字. 1,前面选了,后 ...
- Lintcode: k Sum II
Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where the ...
最新文章
- ExtJs选项卡,求大神解答
- 让Source Insight完美支持中文注释 (转)
- C++自学笔记_文本查询程序_《C++ Primer》
- python打开文件_喜大普奔 | 如何在Win10下利用Python打开grib文件
- [DIV+CSS应用]澄清display:inline;与float:left;的用途
- 【iOS 开发】使用 iMazing 进行沙盒调试
- Http协议(5)—HTTP摘要认证
- setpriority_Java Thread类的最终void setPriority(int priority)方法(带示例)
- 下推栈实现(c++编程思想 p136)
- (三十九)数据的持久化存储-plist实现(XML属性表)
- 导出无法正常启动的VMware虚拟机中的文件
- ant design vue table 高度自适应_Vue.JS 实现拼拼乐小游戏项目
- OneGame V1.0 发布,开源免费页游联运系统
- 程序员需要记住的3个优秀网站
- 【数据分享】糖尿病患者研究数据集
- 网站监控,盘点五款值得使用的网站监控工具
- android开机优化-framework
- 基于java的智能手表_基于安卓Android智能手环(计步器)APP设计(含录像)
- 计算机经常断开网络,怎么解决电脑经常自动断网掉线的问题
- Help library 安装arcobjects for .NET异常问题