Here my code to solve the 4sum question in leetcode
var fourSum = function(ns, tar) {
ns.sort((a, b) => a-b);
let res=[], out=false;
for(let i=0; i<ns.length-3; i++) {
if(ns[i] !== ns[i-1]) {
out = threeSum(ns, i+1, tar-ns[i]);
for(let item of out) {
res.push([ns[i], ...item]);
}
}
}
return res;
};
var threeSum = function(ns, ind, tar) {
let res=[], out=false;
for(let i=ind; i<ns.length-2; i++) {
if(ns[i] !== ns[i-1]) {
out = twoSum(ns, i+1, tar-ns[i]);
for(let item of out) {
res.push([ns[i], ...item]);
}
}
}
return res;
}
var twoSum = function(ns, ind, tar) {
let set = new Set();
let res = [];
for(let i=ind; i<ns.length; i++) {
if(set.has(tar-ns[i])) {
res.push([tar-ns[i], ns[i]]);
while(ns[i] === ns[i+1]) i++;
} else {
set.add(ns[i]);
}
}
return res;
}
Currently it is not able to pass
case 1:
[0, 0, 0, 0]
0
if I remove if(ns[i] !== ns[i-1]) {
It is able to pass case 1, but fail at
case 2:
[-3,-2,-1,0,0,1,2,3]
0