[LeetCode] Combination Sum
来源:互联网 发布:php购物系统源码 编辑:程序博客网 时间:2024/05/17 23:15
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
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 2,3,6,7
and target 7
,
A solution set is: [7]
[2, 2, 3]
解题用了深度优先遍历,并用一个vector模拟了一个出入栈的操作,涉及algorithm中sort和unique的用法。需要注意出入栈的时机。像这种递归中再使用循环(int i = curIdx;)的场景是一种题型,需要举一反三。
class Solution {public: vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > rslt; vector<int> curRslt; if (0 == candidates.size()) { return rslt; } sort(candidates.begin(), candidates.end()); vector<int>::iterator pos = unique(candidates.begin(),candidates.end()); candidates.erase(pos, candidates.end()); DFS(0, 0, target, curRslt, candidates, rslt); return rslt; }private: void DFS(int curSum, int curIdx, int target, vector<int> &curRslt, vector<int> &candicates, vector<vector<int> > &rslt) { if (curSum > target)return; if (curSum == target) { rslt.push_back(curRslt); return; } for (int i = curIdx; i < candicates.size() && curSum+candicates[i] <= target; i++) { curRslt.push_back(candicates[i]); curSum += candicates[i]; DFS(curSum, i, target, curRslt, candicates, rslt);//本次i=0,进入递归i仍为0,比如2 3 6 7,t=7,223=7 curSum -= candicates[i];//每次递归跑到头后,都要退栈 curRslt.pop_back(); } }};
0 0
- [LeetCode] Combination Sum、Combination Sum II
- 【LeetCode】Combination Sum && Combination Sum II
- leetcode之Combination Sum && Combination Sum II
- leetcode Combination Sum &Combination Sum II
- leetcode-combination sum and combination sum II
- Leetcode:Combination Sum与Combination Sum II
- leetcode Combination Sum VS Combination Sum II
- [Leetcode]Combination Sum &&Combination Sum II
- LeetCode Combination Sum & Combination Sum II
- leetcode | Combination Sum & Combination Sum 2
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- [LeetCode]Combination Sum
- [LeetCode]Combination Sum II
- LeetCode Combination Sum
- LeetCode Combination Sum II
- Ural1024 (LCM+置换)
- 理解傅里叶变换算法(二)
- Qt运行机制杂记
- 从零开始—HTML5游戏开发:第零篇
- 常用排序算法直观表示
- [LeetCode] Combination Sum
- 图像傅里叶分析
- NYOJ 题目17 单调递增最长子序列(动态规划)
- 为什么有时候waitkey 停不下来 的原因
- Hibernate用ThreadLocal模式 (线程局部变量模式) 管理Session
- Hdu 2243 考研路茫茫——单词情结 (AC自动机+矩阵)
- 最简单的Grunt插件发布流程(通过 yo gruntplugin )
- C/C++语言的一些小总结
- CocosEditor-java开发关键函数汇总【更新中】