Combination Sum II
来源:互联网 发布:办公软件app 编辑:程序博客网 时间:2024/06/05 20:08
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]
思路:这道题是Combination Sum的延伸,不能有重复的结果集。只需在I上修改,先统计出C中每个数字的出现次数,
在组合时如果用到该数字则将数字的次数减一。
class Solution {private: map<int,int> numFreq; vector<vector<int> > res; vector<int> perRes;public: void combinationSum2Helper(int target, int pos, int left) { if (target == 0) { res.push_back(perRes); } else { map<int,int>::iterator it; for(it=numFreq.begin(); it!=numFreq.end(); ++it) { if(it->first>=left && it->second>0 && target-it->first>=0) { it->second--; perRes.resize(pos+1); perRes[pos] = it->first; combinationSum2Helper(target-it->first,pos+1,it->first); it->second++; } } } } vector<vector<int> > combinationSum2(vector<int> &num, int target) { numFreq.clear(); res.clear(); perRes.clear(); if (num.empty()) { return res; } int len = num.size(); int i; for(i=0; i<len; ++i) { if (numFreq.find(num[i]) != numFreq.end()) { numFreq[num[i]]++; } else { numFreq.insert(pair<int,int>(num[i],1)); } } combinationSum2Helper(target, 0, 0); return res; }};
0 0
- Combination Sum && Combination Sum II
- Combination Sum Combination Sum II
- Combination Sum II
- LeetCode: Combination Sum II
- LeetCode: Combination Sum II
- [LeetCode]Combination Sum II
- LeetCode Combination Sum II
- [Leetcode] Combination Sum II
- Combination Sum II
- [LeetCode] Combination Sum II
- LeetCode Combination Sum II
- [Leetcode] Combination Sum II
- Combination Sum II
- LeetCode: Combination Sum II
- Combination Sum II
- leetcode Combination Sum II
- Combination Sum II
- [LeetCode]Combination Sum II
- 构建根文件系统
- java线程同步锁优化
- poj2135 Farm Tour(最小费用流)
- Java中byte转换int时与0xff进行与运算的原因
- POJ 2007 Scrambled Polygon(点的极角排序)
- Combination Sum II
- VS2008 自定义消息的问题
- 2014 ACM/ICPC Asia Regional Guangzhou Online
- 【华为SO挑战赛】电话号码检查
- LeetCode - 3Sum Closest
- 2.5 Git 基础 - 远程仓库的使用
- nyoj 448 寻找最大数(贪心)
- 找一个方向,让自己继续前行
- win7 64位操作系统为acess数据库配置ODBC数据源 .