018-四数之和 4Sum

Description

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d , 使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。

Example
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

满足要求的四元组集合为:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]
Solution
func fourSum(nums []int, target int) [][]int {
    sort.Ints(nums)
    maps := map[int]int{}
    maps2 := map[string]bool{}
    for i,v := range nums {
        maps[v] = i
    }
    var list  [][]int
    for i := 0 ; i < len(nums) ; i ++ {
        for j := i +1;j < len(nums); j ++ {
            for k := j +1 ; k < len(nums); k ++ {
                member := target - nums[i] - nums[j] - nums[k]
                if index,ok := maps[member];ok && index != i && index != j && index != k {
                    valuess := []int{nums[i],nums[j],nums[k],member}
                    sort.Ints(valuess)
                    key := strconv.Itoa(valuess[0]) + strconv.Itoa(valuess[1])+strconv.Itoa(valuess[2])+strconv.Itoa(valuess[3])
                    if _,ok := maps2[key];!ok {
                        list = append(list, valuess)
                        maps2[key] = true
                    }
                }
            }
        }
    }
    return list
}

leetCode地址