LeetCode_Combination Sum
2013-06-30 11:32
232 查看
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
target
A solution set is:
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,7and
target
7,
A solution set is:
[7]
[2, 2, 3]
vector<vector<int> > combinationSum(vector<int> &arr, int target) { vector<vector<int> > ans; int size = arr.size(); if (size == 0) return ans; sort(arr.begin(), arr.end()); vector<pair<int, vector<int> > > vec; int *indexArr = new int[size]; for (int i = 0; i < size; ++i) { indexArr[i] = i; vector<int> tmp; tmp.push_back(arr[i]); if (arr[i] == target) { ans.push_back(tmp); } else { vec.push_back(make_pair(arr[i], tmp)); } } int end = vec.size(); int index = 0; while (index < vec.size()) { for (int i = 0; i < size; ++i) { int curNum = arr[i]; int from = indexArr[i]; indexArr[i] = vec.size(); // 如果是最后一个,就到第0个 int to = end; for (int j = from; j < to; ++j) { int sum = vec[j].first; ++index; vector<int> tmp = vec[j].second; if (sum + curNum <= target) { tmp.push_back(curNum); if (sum + curNum == target) { sort(tmp.begin(), tmp.end()); ans.push_back(tmp); } else { vec.push_back(make_pair(sum + curNum, tmp)); } } } } index = end; end = vec.size(); } return ans; }
相关文章推荐
- LeetCode | Combination Sum
- [leetCode] Combination Sum
- leetcode 39: Combination Sum
- LeetCode-Combination Sum
- leetcode—Combination Sum
- LeetCode-39-Combination Sum, 回溯dfs,Python的list.append()覆盖前面,tuple,set
- Leetcode 39 Combination Sum
- LEETCODE: Combination Sum
- 【leetcode】Combination Sum
- 回溯之Leetcode39——Combination Sum
- [LeetCode] Combination Sum 2
- Leetcode--Combination Sum
- LeetCode 10.7 Combination Sum
- leetcode39 Combination Sum
- leetcode: Combination Sum
- [leetcode]Combination Sum
- [leetcode][回溯] Combination Sum
- LeetCode_39 Combination Sum
- [Leetcode]Combination Sum
- LeetCode039 Combination Sum