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
}
浙公网安备 33010602011771号