Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.
Note:
- All numbers (including target) will be positive integers.
- Elements in a combination (a1, a2, � , ak) must be in non-descending order. (ie, a1 ? a2 ? � ? ak).
- The solution set must not contain duplicate combinations.
For example, given candidate set 10,1,2,7,6,1,5
and target 8
,
A solution set is: [1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
class Solution { public: vector<vector<int> > combinationSum2(vector<int> &num, int target) { vector<vector<int> > ret; if(target <= 0) return ret; if(num.size() == 0) return ret; sort(num.begin(), num.end()); vector<int> tmp; iter(num, target, 0, tmp, ret); return ret; } void iter(vector<int> &num, int target, int beg, vector<int> tmp, vector<vector<int> > &ret) { if(target == 0) { ret.push_back(tmp); return; } if(target > 0) { for(int i = beg; i < num.size(); ++i) { if(i == beg || num[i] != num[i-1]) { tmp.push_back(num[i]); iter(num, target-num[i], i+1, tmp, ret); tmp.pop_back(); } } } } };
欢迎关注微信公众号——计算机视觉
相关推荐
java java_leetcode题解之Combination Sum II.java
js js_leetcode题解之40-combination-sum-II.js
c语言入门 C语言_leetcode题解之40-combination-sum-ii.c
java java_leetcode题解之Combination Sum.java
java java_leetcode题解之Combination Sum IV.java
java java_leetcode题解之Combination Sum III.java
239 Combination Sum II 579 240 Combination Sum III 581 241 Combinations 583 242 Letter Combinations of a Phone Number 587 243 Restore IP Addresses 589 244 Reverse Integer 591 245 Palindrome Number 593
本题解聚焦于LeetCode的第40题,名为"Combination Sum II",这是一道关于组合问题的典型算法题。在这个问题中,我们需要找出所有可能的组合,使得组合中的数字之和等于给定的目标值。以下是对这个问题的详细分析和...
java入门 java_leetcode题解之039_Combination_Sum
js js_leetcode题解之39-combination-sum.js
c语言入门 C语言_leetcode题解之39-combination-sum.c
python python_leetcode题解之216_Combination_Sum_III.py
### 求子集C++算法详解 ...本文通过分析提供的C++代码,详细解释了递归求子集算法的工作原理、实现细节以及时间空间复杂度等关键概念。希望本文能帮助读者更好地理解和掌握求子集问题的相关知识。
### C++中的排列组合算法实现 #### 1. 排列算法(Permutation) 在C++中,排列算法通常用于生成一组元素的所有可能顺序。在给定的代码中,排列算法通过递归方式实现。其主要步骤包括: - **初始化**: 定义一个数组...
在C++中实现这个功能,可以帮助我们解决很多组合优化问题,例如计数、排列组合等。本篇文章将详细讲解如何用C++来计算n个元素中由k个元素组成的子集个数,以及涉及的相关知识点。 首先,我们需要理解组合的基本定义...
C++代码实现如下: ```cpp vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int>> result; vector<int> current; backtrack(candidates, target, result, current, 0...
这个问题来源于LeetCode的一个经典题目——“组合总和II”(Combination Sum II),它要求我们找到一组数组中的所有可能组合,使得这些数字的和等于给定的目标数,但每个数字只能使用一次。 首先,我们要理解“剪枝”...