/** * @param {number[]} nums * @return {number[][]} */ var threeSum = function(nums) { nums.sort((a,b)=>a-b); let result=[]; for(let i=0;i<nums.length-2;i++){ if(nums[i]>0) return result;//因为求三数之和等于0,如果第一个数已经大于0,后面肯定无解 if(i>0&&nums[i]==nums[i-1]) continue; let left=i+1; let right=nums.length-1; while(left<right){ if(nums[i]+nums[left]+nums[right]==0){ result.push([nums[i],nums[left],nums[right]]); left++; right--; }else{ nums[i]+nums[left]+nums[right]>0?right--:left++; } while(left>i+1&&nums[left]==nums[left-1]) left++; while(right<nums.length-1&&nums[right]==nums[right+1]) right--; } } return result; };