-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCombinationSum.cc
More file actions
56 lines (44 loc) · 1.14 KB
/
Copy pathCombinationSum.cc
File metadata and controls
56 lines (44 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
private:
vector<vector<int> > ret;
vector<int> a;
public:
void solve(int dep, int maxDep, int target, vector<int> &cand) {
if (target < 0) return;
if (dep == maxDep) {
if (target == 0) {
vector<int> res;
for (int i = 0; i < maxDep; i++)
for (int j = 0; j < a[i]; j++) res.push_back(cand[i]);
ret.push_back(res);
}
return;
}
for (int i = 0; i <= target / cand[dep]; i++) {
a[dep] = i;
solve(dep + 1, maxDep, target - cand[dep] * i, cand);
}
}
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());
a.resize(candidates.size());
ret.clear();
if (candidates.size() == 0) return ret;
solve(0, candidates.size(), target, candidates);
return ret;
}
};
int main(int argc, char const *argv[]) {
/* code */
return 0;
}