leetcode - Combination Sum
2013-03-26 19:11
435 查看
题目描述:点击此处
class Solution { public: void getResult(vector<vector<int>> & rlt, vector<int> current, vector<int>* tags, int target){ if (target <= 0) return; int maxN = 1000000000; if (!current.empty()) maxN = *(current.end()-1); vector<int>::iterator vi; for (vi = tags[target].begin(); vi!=tags[target].end() && *vi<=maxN; vi++){ vector<int> tvi = current; tvi.push_back(*vi); if (target-*vi==0){ vector<int> rr; vector<int>::iterator ii; for (ii=tvi.end()-1; ii+1 != tvi.begin(); ii--){ rr.push_back(*ii); } rlt.push_back(rr); } else getResult(rlt, tvi, tags, target-*vi); } } vector<vector<int> > combinationSum(vector<int> &candidates, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function sort (candidates.begin(), candidates.end()); vector<int>::iterator vi; vector<int>cands; for (vi=candidates.begin(); vi!=candidates.end(); vi++){ if (!cands.empty() && *(cands.end()-1) == *vi) continue; cands.push_back(*vi); } vector<int> * tags = new vector<int>[target+1](); tags[0].push_back(0); for (vi=cands.begin(); vi!=cands.end(); vi++){ for (int i=*vi; i<=target; i++){ if (!tags[i-*vi].empty() && find(tags[i].begin(), tags[i].end(),*vi)==tags[i].end()) tags[i].push_back(*vi); } } vector<vector<int>> rlt; vector<int> current; getResult(rlt, current, tags, target); delete []tags; return rlt; } };
相关文章推荐
- [LeetCode]Combination Sum
- [LeetCode] Combination Sum 和确定的组合数的个数
- Leetcode_Combination Sum
- Combination Sum —— LeetCode
- 【LeetCode】 Combination Sum 系列
- LeetCode 39 - Combination Sum
- LeetCode:Combination Sum
- [LeetCode] Combination Sum
- [Leetcode] Combination Sum
- leetcode:Combination Sum
- Leetcode:Combination Sum
- 38_leetcode_Combination Sum
- LeetCode(39) Combination Sum
- leetcode || 39、Combination Sum
- [Leetcode 39, Medium] Combination Sum
- LeetCode刷题【Array】 Combination Sum
- [Leetcode] combination sum 组合之和
- LeetCode----Combination Sum
- 【leetcode】Combination Sum
- [LeetCode] Combination Sum