1.首先对数组进行从小到大排序,接着运用for循环固定一个数nums[i],并运用指针确定左右两端的数nums[L]和nums[R],如果相加和为0,则将数据放到数组中,并返回。
2.如果在循环中nums[i]>0,则三数之和不可能为0,break
3.如果for循环中nums[i]==nums[i-1],则说明有重复的,进行continue
4.当sum==0时,如果sum>0,则R--,如果sum<0,则L++。
var threeSum = function(nums) {
let ans=[]
let len=nums.length
nums.sort((a,b)=>a-b)
for(let i=0;i<len;i++){
if(nums[i]>0) break;
if(i>0 && nums[i]===nums[i-1]) continue
let L=i+1
let R=len-1
while(L<R){
const sum=nums[i]+nums[L]+nums[R]
if(sum===0){
ans.push([nums[i],nums[L],nums[R]])
while(L<R && nums[L]=== nums[L+1]) L++;
while(L<R && nums[R]=== nums[R-1]) R--;
L++;
R--;
}else if(sum<0) L++
else if(sum>0) R--
}
}
return ans
};