-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConbination Sum.js
82 lines (62 loc) · 1.64 KB
/
Conbination Sum.js
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function(candidates, target) {
var length = candidates.length;
candidates = candidates.sort(function(val1, val2) { // step 1
return val1>val2?1:val1<val2?-1:0;
});
var result = new Array();
helper(candidates,0,target,[],result);
return result;
};
var helper = function (candidates,index,target,curr,result) {
if(target === 0) {
result.push(curr.slice());
return;
}
for (var i = index;i < candidates.length;i++) {
if (target < candidates[i]) {
return;
}
curr.push(candidates[i]);
helper(candidates,i,target - candidates[i],curr,result);
curr.pop();
}
};
var combinationSum2 = function(candidates, target) {
var length = candidates.length;
candidates = candidates.sort(function(val1, val2) { // step 1
return val1>val2?1:val1<val2?-1:0;
});
var result = new Array();
recur(0,[],target);
return result;
function recur(index,current,target){
if(target === 0){
result.push(current.slice());
return;
}
if(target <= 0){
return;
}
if(index === length){
return;
}
current.push(candidates[index]);
recur(index,current,target-candidates[index]);
current.pop();
recur(index+1,current,target);
};
};
var array = [1,2,2,3],target = 7;
var result = combinationSum(array,7);
for (var i = 0;i < result.length;i++) {
console.log(result[i].length);
}
/*
思路1:
思路2:
*/