leetcode之18四数之和Golang

四数之和其实和三数之和完全一样:

  我们可以这样考虑,他们的和减去其中一个数,是不是就变成了新的三数之和,那么接下来就按照处理三数之和的方式去处理,处理过程完全一样

  参照前面的三数之和的博文

代码如下:

func fourSum(nums []int, target int) [][]int {
	var resArr [][]int
	// 从小到大排序
	sort.Ints(nums)
	for i := 0; i < len(nums); i++ {
		if i > 0 && nums[i] == nums[i-1] {
			continue
		}
		newTarget := target - nums[i]
		// 转化成了三数之和,和为新的target
		for j := i + 1; j < len(nums); j++ {
			if j > i+1 && nums[j] == nums[j-1] {
				continue
			}
			// 转化为两数之和
			newTargetPro := newTarget - nums[j]
			for indexHed, indexTal := j+1, len(nums)-1; indexHed < indexTal; {
				if indexHed > j+1 && nums[indexHed] == nums[indexHed-1] {
					indexHed++
					continue
				}
				if indexTal < len(nums)-1 && nums[indexTal] == nums[indexTal+1] {
					indexTal--
					continue
				}
				tmpSum := nums[indexHed] + nums[indexTal]
				if tmpSum == newTargetPro {
					resArr = append(resArr, []int{nums[i], nums[j], nums[indexHed], nums[indexTal]})
					indexHed++
					indexTal--
				} else if tmpSum > newTargetPro {
					indexTal--
				} else {
					indexHed++
				}
			}
		}
	}
	return resArr
}

  

posted @ 2020-09-10 12:16  胖胖咩  阅读(217)  评论(0)    收藏  举报