【题目描述】
Given an array
S
of
n
integers, are there elements
a
,
b
,
c
in
S
such that
a
+
b
+
c
= 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
var results=[];
if(nums.length<3){
return results;
}
nums.sort(function(a,b){
if(a<b){
return -1;
}else if(a>b){
return 1;
}else {
return 0;
}
});
for(var i=0;i<nums.length-1 && nums[i]<=0;i++){
if(nums[i-1]===nums[i]){
continue;
}
var curr=nums[i];
var m=i+1;
var n=nums.length-1;
while(m<n){
if(nums[m]+nums[n]+curr===0){
var re=[];
re.push(curr);
re.push(nums[m]);
re.push(nums[n]);
results.push(re);
while((m<n) && (nums[m]===nums[m+1])){
m++;
}
while((m<n) && (nums[n]===nums[n-1])){
n--;
}
m++;
n--;
}else if(curr+nums[m]+nums[n]<0){
m++;
}else{n--;}
}}
return results;
};