# 015. 3Sum

## 刷题内容

• https://leetcode.com/problems/3sum

Given an array nums of n integers, are there elements a, b, c in nums 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.


#### Example:

 Given array nums = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]


## 解题方案

/**
* @param {number[]} nums
* @return {number[][]}
*/
let threeSum = function(nums, n = 0) {
let result = [];
let len = nums.length;
if(!len) return result;
// 对数组进行排序
nums.sort((a,b)=>a-b);
for(let k = 0; k<len; k++){
//重复的元素则结果也一样，所以跳过该循环
if(k>0 && nums[k-1] === nums[k]){
continue;
}
let target = n - nums[k];
let i = k + 1;
let j = len -1;
while(i<j){
if(nums[i] + nums[j] === target){
result.push([nums[k],nums[i],nums[j]]);
while (i<j && nums[i] === nums[i+1]) i++;
while (i<j && nums[j] === nums[j-1]) j--;
i++;
j--;
}else if(nums[i] + nums[j] > target){
j--;
}else{
i++
}
}
}
return result;
};


apachecn/AiLearning