leetcode之18四數之和Golang
阿新 • • 發佈:2020-09-10
四數之和其實和三數之和完全一樣:
我們可以這樣考慮,他們的和減去其中一個數,是不是就變成了新的三數之和,那麼接下來就按照處理三數之和的方式去處理,處理過程完全一樣
參照前面的三數之和的博文
程式碼如下:
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 }