File tree 1 file changed +43
-0
lines changed
1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
1
+ function fourSum ( nums : number [ ] , target : number ) : number [ ] [ ] {
2
+ const sortedNums : number [ ] = nums . sort ( ( a : number , b : number ) => a - b ) ;
3
+ const res : number [ ] [ ] = [ ] ;
4
+ const quad : number [ ] = [ ] ;
5
+
6
+ const kSum = ( k : number , start : number , target : number ) : void => {
7
+ if ( k > 2 ) {
8
+ for ( let i = start ; i < sortedNums . length ; i ++ ) {
9
+ if ( i !== start && sortedNums [ i ] === sortedNums [ i - 1 ] ) {
10
+ continue ;
11
+ }
12
+ quad . push ( sortedNums [ i ] ) ;
13
+ kSum ( k - 1 , i + 1 , target - sortedNums [ i ] ) ;
14
+ quad . pop ( ) ;
15
+ }
16
+ } else {
17
+ let left : number = start ;
18
+ let right : number = sortedNums . length - 1 ;
19
+
20
+ while ( left < right ) {
21
+ const sum = sortedNums [ left ] + sortedNums [ right ] ;
22
+ if ( sum < target ) {
23
+ left ++ ;
24
+ } else if ( sum > target ) {
25
+ right -- ;
26
+ } else {
27
+ res . push (
28
+ quad . concat ( [ sortedNums [ left ] , sortedNums [ right ] ] )
29
+ ) ;
30
+ left ++ ;
31
+ while (
32
+ left < right &&
33
+ sortedNums [ left ] === sortedNums [ left - 1 ]
34
+ ) {
35
+ left ++ ;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ } ;
41
+ kSum ( 4 , 0 , target ) ;
42
+ return res ;
43
+ }
You can’t perform that action at this time.
0 commit comments