GoLang刷题之leetcode

题目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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值