| 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 | }; |