思路
思路1:求和问题转为求差问题-固定一个数,在剩下的数中寻找是否有两个数与之相加和为0
思路2:双指针实现空间换时间,且保证该数组必须有序
答案
const threeNumberSum = (list) => {
const result = [];
list.sort((a, b) => a - b)
for(let i = 0; i< list.length-2; i++) {
let left = i + 1;
let right = list.length - 1;
if(i> 0 && list[i] === list[i-1]) {
continue;
}
while(left < right) {
if(list[i] + list[left] + list[right] < 0) {
left++
while(left < right && list[left-1] === list[left]) {
left++
}
} else if (list[i] + list[left] + list[right] > 0) {
right--
while(left < right && list[right] === list[right + 1]) {
right--
}
} else {
result.push([list[i], list[left], list[right]])
left++
right--
while(left < right && list[left-1] === list[left]) {
left++
}
while(left < right && list[right] === list[right + 1]) {
right--
}
}
}
}
return result;
}