15. 三数之和

15. 三数之和 #

题目地址 #

解题思路 #

具体实现 #

```go package main import ( "fmt" "sort" ) func threeSum(nums []int) [][]int { sort.Ints(nums) res := [][]int{} // 找出 a + b + c = 0 // a = nums[i], b = nums[left], c = nums[right] for i := 0; i < len(nums)-2; i++ { // 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了 n1 := nums[i] if n1 > 0 { return res } // 去重 a if i > 0 && n1 == nums[i-1] { continue } left, right := i+1, len(nums)-1 for left < right { n2, n3 := nums[left], nums[right] if n1+n2+n3 == 0 { res = append(res, []int{n1, n2, n3}) // 去重逻辑应该放在找到一个三元组之后,对 b 和 c 去重 for left < right && nums[left] == n2 { left++ } for left < right && nums[right] == n3 { right-- } } else if n1+n2+n3 < 0 { left++ } else { right-- } } } return res } func main() { ret := threeSum([]int{-1, 0, 1, 2, -1, -4}) fmt.Println(ret) } ```