题目描述

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明:

所有数字(包括目标数)都是正整数。

解集不能包含重复的组合。

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,

所求解集为:

[

[1, 7],

[1, 2, 5],

[2, 6],

[1, 1, 6]

]

示例 2:

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

所求解集为:

[

[1,2,2],

[5]

]

题解

此题与“组合之和”一题有两个不同:一是该题数组中的数字可能会重复;二是每个数字在每个组合中只能使用一次。

数字重复带来的一个问题是组合可能会重复,所以需要做去重处理。

同“组合之和”一题一样,这里使用的也是递归+剪枝,这里首先对数据进行排序,方便剪枝和去重。

每个数字只能使用一次,可以修改递归的起点,之前是i,这里可以修改为i + 1。

其它细节具体见代码。

代码

class Solution {

public:

vector> res;

vectorsol;

void dfs(vector& nums, int beg, int target){//递归

for(int i = beg; i < nums.size(); ++i){

if(target - nums[i] < 0){//之和大于则直接return

return;

}

if(i > beg && nums[i] == nums[i - 1]){//去重

continue;

}

sol.push_back(nums[i]);

if(target == nums[i]){//满足条件 放到题解中

res.push_back(sol);

sol.pop_back();

return;

}

else{

dfs(nums, i + 1, target - nums[i]);//之和小于target,则继续向下递归,注意此时beg是从i+1开始的

sol.pop_back();

}

}

}

vector> combinationSum2(vector& candidates, int target) {

sort(candidates.begin(), candidates.end());

dfs(candidates, 0, target);

return res;

}

};

运行结果

ii 组合总和_40. 组合总和 II – 力扣(LeetCode)相关推荐

  1. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  2. 力扣(LeetCode)刷题,简单+中等题(第33期)

    目录 第1题:Z 字形变换 第2题:删除字符串中的所有相邻重复项 第3题:基本计算器 II 第4题:螺旋矩阵 第5题:螺旋矩阵 II 第6题:盛最多水的容器 第7题:删除有序数组中的重复项 II 第8 ...

  3. 力扣(LeetCode)刷题,简单+中等题(第31期)

    目录 第1题:同构字符串 第2题:最后一块石头的重量 第3题:最小路径和 第4题:键盘行 第5题:存在重复元素 II 第6题:两数相加 第7题:三个数的最大乘积 第8题:等价多米诺骨牌对的数量 第9题 ...

  4. 力扣(LeetCode)刷题,简单+中等题(第30期)

    目录 第1题:单词规律 第2题:找不同 第3题:在排序数组中查找元素的第一个和最后一个位置 第4题:使用最小花费爬楼梯 第5题:寻找峰值 第6题:字符串中的第一个唯一字符 第7题:两个数组的交集 II ...

  5. 力扣(LeetCode)刷题,简单+中等题(第28期)

    目录 第1题:翻转单词顺序 第2题:顺时针打印矩阵 第3题:总持续时间可被 60 整除的歌曲 第4题:字符串的最大公因子 第5题:上升下降字符串 第6题:将数组分成和相等的三个部分 第7题:可被 5 ...

  6. 力扣(LeetCode)刷题,简单+中等题(第26期)

    目录 第1题:字典序排数 第2题:字符串解码 第3题:查找常用字符 第4题:所有奇数长度子数组的和 第5题:长按键入 第6题:分割字符串的最大得分 第7题:回文链表 第8题:有多少小于当前数字的数字 ...

  7. 力扣(LeetCode)刷题,简单题(第24期)

    目录 第1题:两个列表的最小索引总和 第2题:反转字符串中的元音字母 第3题:整数反转 第4题:将有序数组转换为二叉搜索树 第5题:第N个泰波那契数 第6题:数组序号转换 第7题:质数排序 第8题:日 ...

  8. 力扣(LeetCode)刷题,简单题(第19期)

    目录 第1题:两数之和2-输入有序数组 第2题:换酒问题 第3题:山脉数组的峰顶索引 第4题:矩阵中的幸运数 第5题:去掉最低工资和最高工资后的工资平均值 第6题:非递增顺序的最小子序列 第7题:独一 ...

  9. 力扣(LeetCode)刷题,简单题+中等题(第17期)

    目录 第1题:数组中的第K个最大元素 第2题:字符串相乘 第3题:最长重复子数组 第4题:有效的完全平方 第5题:访问所有点的最小时间 第6题:路径总和 第7题:跳水板 第8题:解压缩编码列表 第9题 ...

  10. 力扣(LeetCode)刷题,简单题(第15期)

    目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...

最新文章

  1. 曼哈顿距离和欧拉距离
  2. C# 结合 PInvoke 对接 IP 摄像头的笔记
  3. 仅用语音生成人体姿态,代码已开源
  4. 突发!暂停新用户注册,微信这样回应
  5. vue 图片自适应排列插件_vue自适应布局3种方法
  6. eclipse插件开发(二) 简易4页签编辑器(源码 | 设计 | JS | CSS)配色
  7. centos7 dotnet command not found
  8. NFS服务启动:rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
  9. html5中加入视频格式,HTML5音视频格式video和audio
  10. 【转】IT从业人员必看的10个论坛
  11. Kaldi语料的两种切分/组织方式及其处理
  12. 【Python 代码】类似SADPTool工具,搜索海康设备
  13. 《动手学深度学习》Mxnet环境搭建
  14. CTF---Web入门第十六题 天下武功唯快不破
  15. java bsdiff_Android差分包生成和合成新包-bsdiff
  16. 最新Z-blog黑色极简风格文章博客主题模板源码
  17. 信捷plc485通信上位机_上位机开发之三菱FX3U以太网通信实践
  18. 自编码器,变分自编码器和生成对抗网络异同
  19. 【git】git本地如何合并分支
  20. 同花顺_知识_庄家技法_5出货技法

热门文章

  1. adb.exe可能被其他程序关闭_木工中央除尘设备系统正式运行的操作程序
  2. 计算机网络-基本概念(5)【网络层】-IP多播
  3. Apache Flink 零基础入门(二十一)Flink HistoryServer概述与配置
  4. java客户端访问kafka
  5. Pandas数据挖掘与分析时的常用方法
  6. 真香!用 4K 高清显示器写代码,包邮送一台!
  7. mysql主从克隆服务器_mysql主从复制服务器配置
  8. java throw异常_java throw拋出异常详解
  9. python学习笔记四一列表元组字典等
  10. 全国计算机一级考试理论,全国计算机等级考试一级理论汇总(最新版).pptx