1. 程式人生 > 實用技巧 >leetcode之18四數之和Golang

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
}