LeetCode 三数之和,Python实现

最近在刷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

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


展开阅读全文

没有更多推荐了,返回首页