LeetCode T15

在这里插入图片描述

class Solution:
    def threeSum(self, nums):
        final = []
        z = 0
        dPz = dict()
        dFz = dict()
        for num in nums:
            if num > 0:
                if num in dFz:
                    dFz[num] += 1
                else:
                    dFz[num] = 1
            elif num < 0:
                if num in dPz:
                    dPz[num] += 1
                else:
                    dPz[num] = 1
            else:
                z+=1
                    
        if z >= 3:
            final.append([0,0,0])
        
        # 如果大于0和小于0集合不为空
        if len(dPz) !=0 and len(dFz)!=0:
            # 对小于0数组遍历
            for pi in dPz:
                count = dPz[pi]
                # 两个一样的负数,一个正数
                if count>=2 and 2*pi*(-1) in dFz:
                    final.append([pi,pi,2*pi*(-1)])
                # 一正一负,互为相反数,还有一个0
                if z>0 and pi*(-1) in dFz:
                    final.append([pi,0,pi*(-1)])
                # 两个不一样的负数,一个正数
                for pj in dPz:
                    # 限制元组不为空
                    if pi >= pj:
                        continue
                    if (pi + pj)*(-1) in dFz:
                        final.append([pi,pj,(pi + pj)*(-1)])
            # 对大于0数组遍历
            for ni in dFz:
                count = dFz[ni]
                if count>=2 and 2*ni*(-1) in dPz:
                    final.append([ni,ni,2*ni*(-1)])
                for nj in dFz:
                    if ni >= nj :
                        continue
                    if (-1)*(ni+nj) in dPz:
                        final.append([ni,nj,(ni + nj)*(-1)])

        return final

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wjl__ai__/article/details/112121796