# leetcode15.三数之和

> Problem: [15. 三数之和](https://leetcode.cn/problems/3sum/description/)

## 思路

> 重点在于第一个数不能为正数，第二第三个数通过滑动窗口找到

## Code

```Go
func threeSum(nums []int) [][]int {
    result:=make([][]int,0)
    sort.Ints(nums)
    numsLength:=len(nums)

    for i:=0;i<numsLength-2;i++{
        n1:=nums[i]
        //如果n1大于0，不需要往下执行，因为不可能有三数之和等于零
        if n1>0{
            break
        }
        //如果i大于0，但是和之前的数相同，i继续累加
        if i>0{
            if n1==nums[i-1]{
                continue
            }
        }
        l,r:=i+1,numsLength-1

        for l<r{
            n2,n3:=nums[l],nums[r]
            temp:=n1+n2+n3
            if temp==0{
                result=append(result,[]int{n1,n2,n3})
                for l<r&&n2==nums[l]{
                    l++
                }
                for l<r&&n3==nums[r]{
                    r--
                }
            }else{
                if temp>0{
                    r--
                }else{
                    l++
                }
                
            }
        }
        
    }
    return result

}
```
