题目18:四数之和
题目描述:
题解:
这题和之前的三数之和很像,不一样的是多加了一重循环
func fourSum(nums []int, target int) [][]int {
sort.Ints(nums)
l := len(nums)
if l<4||nums[0]>target/4{
return [][]int{}
}
res := [][]int{}
for la:=0;la<l-3;la++{
if la>0&&nums[la]==nums[la-1]{
continue
}
for rd:=l-1;rd > 2;rd--{
if rd<l-1&&nums[rd]==nums[rd+1]{
continue
}
lb := la+1
rc := rd-1
addnum := target-nums[la]
addnums := addnum-nums[rd]
for lb < rc{
if nums[lb]+nums[rc]==addnums{
res = append(res,[]int{nums[la],nums[lb],nums[rc],nums[rd]})
lb++;
rc--;
for nums[lb]==nums[lb-1]&&lb<l-2{
lb++
}
for nums[rc]==nums[rc+1]&&rc>1{
rc--
}
}else if nums[lb]+nums[rc]>addnums{
rc--
}else{
lb++
}
}
}
}
return res
}