Skip to content

Commit 7b0cfd2

Browse files
committed
Create 0018-4sum.ts
1 parent 711f2b7 commit 7b0cfd2

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

Diff for: typescript/0018-4sum.ts

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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+
}

0 commit comments

Comments
 (0)