Skip to content

Commit

Permalink
Create 0018-4sum.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
andynullwong committed Jan 5, 2023
1 parent 711f2b7 commit 7b0cfd2
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions typescript/0018-4sum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
function fourSum(nums: number[], target: number): number[][] {
const sortedNums: number[] = nums.sort((a: number, b: number) => a - b);
const res: number[][] = [];
const quad: number[] = [];

const kSum = (k: number, start: number, target: number): void => {
if (k > 2) {
for (let i = start; i < sortedNums.length; i++) {
if (i !== start && sortedNums[i] === sortedNums[i - 1]) {
continue;
}
quad.push(sortedNums[i]);
kSum(k - 1, i + 1, target - sortedNums[i]);
quad.pop();
}
} else {
let left: number = start;
let right: number = sortedNums.length - 1;

while (left < right) {
const sum = sortedNums[left] + sortedNums[right];
if (sum < target) {
left++;
} else if (sum > target) {
right--;
} else {
res.push(
quad.concat([sortedNums[left], sortedNums[right]])
);
left++;
while (
left < right &&
sortedNums[left] === sortedNums[left - 1]
) {
left++;
}
}
}
}
};
kSum(4, 0, target);
return res;
}

0 comments on commit 7b0cfd2

Please sign in to comment.