C++实现LeetCode(40.组合之和之二)
[LeetCode] 40. Combination Sum II 组合之和之二
Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.
Each number in candidates may only be used once in the combination.
Note:
- All numbers (including target) will be positive integers.
- The solution set must not contain duplicate combinations.
【C++实现LeetCode(40.组合之和之二)】Input: candidates = [10,1,2,7,6,1,5], target = 8,Example 2:
A solution set is:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]
Input: candidates = [2,5,2,1,2], target = 5,这道题跟之前那道 Combination Sum 本质没有区别,只需要改动一点点即可,之前那道题给定数组中的数字可以重复使用,而这道题不能重复使用,只需要在之前的基础上修改两个地方即可,首先在递归的 for 循环里加上 if (i > start && num[i] == num[i - 1]) continue; 这样可以防止 res 中出现重复项,然后就在递归调用 helper 里面的参数换成 i+1,这样就不会重复使用数组中的数字了,代码如下:
A solution set is:
[
[1,2,2],
[5]
]
class Solution {public:vector> combinationSum2(vector & num, int target) {vector > res; vector out; sort(num.begin(), num.end()); helper(num, target, 0, out, res); return res; }void helper(vector & num, int target, int start, vector & out, vector >& res) {if (target < 0) return; if (target == 0) { res.push_back(out); return; }for (int i = start; i < num.size(); ++i) {if (i > start && num[i] == num[i - 1]) continue; out.push_back(num[i]); helper(num, target - num[i], i + 1, out, res); out.pop_back(); }}};
到此这篇关于C++实现LeetCode(40.组合之和之二)的文章就介绍到这了,更多相关C++实现组合之和之二内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- java中如何实现重建二叉树
- leetcode|leetcode 92. 反转链表 II
- 人脸识别|【人脸识别系列】| 实现自动化妆