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相关推荐

  1. 40. Combination Sum II 组合总和 II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  2. Combination Sum 和Combination Sum II

    这两道题的基本思路和combination那一题是一致的,也是分治的方法. 其中combination Sum复杂一点,因为每个数可能用多次.仔细分析下,本质上也是一样的.原来是每个数仅两种可能.现在 ...

  3. 递归/回溯:Combination Sum II数组之和

    问题如下: 已知一组数(其中有重复元素),求这组数可以组成的所有子集中,子 集中的各个元素和为整数target的子集,结果中无重复的子集. 例如: nums[] = [10, 1, 2, 7, 6, ...

  4. C#LeetCode刷题之#40-组合总和 II(Combination Sum II)

    目录 问题 示例 分析 问题 该文章已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3666 访问. 给定一个数组 candidates ...

  5. 40. Combination Sum II

    避免这个循环的重复 所以i>position && nums[i] == nums[i-1] 1 class Solution { 2 List<List<Integ ...

  6. 40. Combination Sum II **

    description: 给定target, 求给定数列中找到几个数(其中的数不可以重复使用,且一组数有几个也不做限制)的和为target,和上面那个题一毛一样的,就改一下下标就行了,背下来背下来背下 ...

  7. 【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 ...

  8. LeetCode40 Combination Sum II 解析

    详细见:leetcode.com/problems/combination-sum-ii C和Python的去重算法,应该记住. Java是很久之前写的,并不好. 规则是:相同数字. 1,前面选了,后 ...

  9. Lintcode: k Sum II

    Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where the ...

最新文章

  1. ExtJs选项卡,求大神解答
  2. 让Source Insight完美支持中文注释 (转)
  3. C++自学笔记_文本查询程序_《C++ Primer》
  4. python打开文件_喜大普奔 | 如何在Win10下利用Python打开grib文件
  5. [DIV+CSS应用]澄清display:inline;与float:left;的用途
  6. 【iOS 开发】使用 iMazing 进行沙盒调试
  7. Http协议(5)—HTTP摘要认证
  8. setpriority_Java Thread类的最终void setPriority(int priority)方法(带示例)
  9. 下推栈实现(c++编程思想 p136)
  10. (三十九)数据的持久化存储-plist实现(XML属性表)
  11. 导出无法正常启动的VMware虚拟机中的文件
  12. ant design vue table 高度自适应_Vue.JS 实现拼拼乐小游戏项目
  13. OneGame V1.0 发布,开源免费页游联运系统
  14. 程序员需要记住的3个优秀网站
  15. 【数据分享】糖尿病患者研究数据集
  16. 网站监控,盘点五款值得使用的网站监控工具
  17. android开机优化-framework
  18. 基于java的智能手表_基于安卓Android智能手环(计步器)APP设计(含录像)
  19. 计算机经常断开网络,怎么解决电脑经常自动断网掉线的问题
  20. Help library 安装arcobjects for .NET异常问题

热门文章

  1. knex简单的增删改查
  2. Python数据分析-房价预测及模型分析
  3. 【Python】时间序列数据分析与预测之Python工具汇总
  4. 智能门铃app开发的功能有哪些
  5. 鱼塘捕捞周期效益分析
  6. uva 11800 Determine the Shape
  7. [乐意黎原创]向上取整⌈⌉和向下取整⌊⌋符号含义及应用
  8. Android 加固应用
  9. SpringBoot笔记(四)其他框架介绍
  10. 去跨国公司还是去创业公司?