1
+ /**
2
+ * Finds all unique combinations of numbers from the candidates array that sum up to the target.
3
+ *
4
+ * @param candidates - An array of numbers.
5
+ * @param target - The target sum.
6
+ * @returns An array of arrays, each containing a unique combination of numbers that sum up to the target.
7
+ *
8
+ * Time Complexity: O(n^2)
9
+ * Space Complexity: O(n)
10
+ */
11
+ function combinationSum ( candidates : number [ ] , target : number ) : number [ ] [ ] {
12
+ // 1. Initialize result array
13
+ let combinations : number [ ] [ ] = [ ] ;
14
+ let candidate : number [ ] = [ ] ;
15
+
16
+ // 2. Define recursive function
17
+ function combination ( start : number , total : number ) {
18
+ console . log ( `start:${ start } , total:${ total } ` )
19
+ if ( target < total ) {
20
+ // 3. If total is greater than target, return
21
+ return ;
22
+ } else if ( target === total ) {
23
+ // 4. If total is equal to target, push candidate to result
24
+ combinations . push ( [ ...candidate ] )
25
+ return ;
26
+ } else {
27
+ // 5. If total is less than target, iterate through candidates
28
+ for ( let i = start ; i < candidates . length ; i ++ ) {
29
+ // 6. Push candidate to result
30
+ candidate . push ( candidates [ i ] )
31
+ // 7. Recursively call combination function
32
+ combination ( i , total + candidates [ i ] )
33
+ // 8. Pop candidate from result
34
+ candidate . pop ( ) ;
35
+ }
36
+ }
37
+ }
38
+ combination ( 0 , 0 ) ;
39
+
40
+ return combinations ;
41
+ } ;
0 commit comments