var
fourSum =
function
(nums, target) {
nums.sort( (a, b)=>a-b );
let json={};
for
( let i = 0; i < nums.length; i ++ ){
json[nums[i]] = json[nums[i]] || 0;
json[nums[i]]++;
}
let ints=[nums[0]];
let preNum = nums[0];
for
( let i = 1; i < nums.length; i ++ ){
if
( preNum != nums[i] ){
preNum = nums[i];
ints.push(nums[i]);
}
}
nums = ints;
let res = [];
for
( let i = 0; i < nums.length; i ++ ){
for
( let j = i + 1; j < nums.length; j ++ ){
for
( let k = j + 1; k < nums.length; k ++ ){
if
( json[ nums[i] ] > 1 && ( nums[i] * 2 + nums[j] + nums[k] == target ) ){
res.push( [ nums[i], nums[i], nums[j], nums[k] ] );
}
if
( json[ nums[j] ] > 1 && ( nums[i] + nums[j] * 2 + nums[k] == target ) ){
res.push( [ nums[i], nums[j], nums[j], nums[k] ] );
}
if
( json[ nums[k] ] > 1 && ( nums[i] + nums[j] + nums[k] * 2 == target ) ){
res.push( [ nums[i], nums[j], nums[k], nums[k] ] );
}
let other = target - nums[i] - nums[j] - nums[k];
if
( other > nums[k] && json[other] ){
res.push( [nums[i], nums[j], nums[k], other] );
}
}
}
}
for
( let i = 0; i < nums.length; i ++ ){
for
( let j = i + 1; j < nums.length; j ++ ){
if
( json[nums[i]] > 2 && ( nums[i] * 3 + nums[j] == target ) ){
res.push( [ nums[i], nums[i], nums[i], nums[j] ] );
}
if
( json[nums[j]] > 2 && ( nums[i] + nums[j] * 3 == target ) ){
res.push( [ nums[i], nums[j], nums[j], nums[j] ] );
}
}
}
for
( let i = 0; i < nums.length; i ++ ){
for
( let j = i + 1; j < nums.length; j ++ ){
if
( json[nums[i]] > 1 && json[nums[j]] > 1 && ( target == nums[i] * 2 + nums[j] * 2 ) ){
res.push( [nums[i], nums[i], nums[j], nums[j]] );
}
}
}
for
( let i = 0; i < nums.length; i ++ ){
if
( json[nums[i]] > 3 && nums[i] * 4 == target ){
res.push( [nums[i], nums[i], nums[i], nums[i]] );
}
}
return
res;
};