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