18. 四数之和

image.png

三个数只和 再次加一层for循环

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. func fourSum(nums []int, target int) [][]int {
  7. var res [][]int
  8. sort.Ints(nums)
  9. for i:=0;i<len(nums)-3;i++{
  10. if i>0&&nums[i]==nums[i-1] {
  11. continue
  12. }
  13. for j:=i+1;j<len(nums)-2;j++{
  14. if j>i+1&&nums[j]==nums[j-1] {
  15. continue
  16. }
  17. l :=j+1
  18. r :=len(nums)-1
  19. for l<r {
  20. temp :=nums[i]+nums[j]+nums[l]+nums[r]
  21. if temp<target {
  22. l++
  23. }else if temp>target {
  24. r--
  25. }else {
  26. res = append(res,[]int{nums[i],nums[j],nums[l],nums[r]})
  27. l++
  28. r--
  29. for l>j+1&&nums[l]==nums[l-1] {
  30. l++
  31. }
  32. for l<len(nums)-2&&nums[r]==nums[r+1]{
  33. r--
  34. }
  35. }
  36. }
  37. }
  38. }
  39. return res
  40. }
  41. func main() {
  42. fmt.Println(fourSum([]int{1, 0, -1, 0, -2, 2},0))
  43. fmt.Println(fourSum([]int{-3,-2,-1,0,0,1,2,3},0))
  44. fmt.Println(fourSum([]int{-1,0,-5,-2,-2,-4,0,1,-2},-9))
  45. }

image.png