LeetCode 三数之和,Python实现

博主刷LeetCode第15题三数之和时,发现网上解题思路难以通过,尤其无法解决三元组重复问题。博主提出自己的解法,先对列表排序,遍历满足要求的三元组,用字典判断避免重复,将符合要求三元组的最大和最小值组合成元组作key存于字典,最终通过该题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在刷LeetCode,其中第15题,三数之和,看了网上很多解题思路,然而并不能顺利通过,尤其是没法解决提交答案中存在三元组重复问题。因此,提出自己的一种解决办法,供大家参考。

原题是这样的:
这里写图片描述

我的解题思路也是通过先对list进行排序,后遍历所有满足要求的三元组,只是在避免三元组重复的问题上,使用了字典作为判断条件。具体思路是将所有符合要求的三元组的最大值和最小值组合成元组,将这个元组作为key保存在字典中,根据字典的key的唯一性,就可保证三元组的唯一性。代码如下(仅供参考,欢迎讨论):

class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        list_ret = []
        d = {} 
        num = len(nums)
        nums.sort()
        for i in range(num): 
            if i == 0 or nums[i]>nums[i-1]: ##避免出现重复三元组 
                l = i+1
                r = num-1            
                while(l < r):
                    s = nums[i] + nums[l] + nums[r]
                    if s == 0:                        
                        col = [nums[i],nums[l],nums[r]]
                        max_e = max(col)
                        min_e = min(col)   
                        if((max_e,min_e)  not in d):
                            list_ret.append(col)                     
                            d[(max_e,min_e)] = 1 ###字典用来最终避免三元组重复
                        r -= 1
                        l += 1                   
                    elif s > 0:
                        r -= 1
                    else:
                        l += 1

        return list_ret

最后通过了,如图所示
这里写图片描述


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥宅程序员aka不会游泳的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值