python | #数组中相加和为0的三元组#

数组中相加和为0的三元组

http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

#
# 
# @param num int整型一维数组 
# @return int整型二维数组
#
class Solution:
    def threeSum(self , num ):
        # write code here
        length = len(num)
        if length <3:
            return []
        res = [] #返回结果
        num.sort() #对数组进行排序
        # 三元组的所有情况有三种:两正一负,两负一正,一负一正一零
        positive = [i for i in num if i >0]
        negative = [i for i in num if i <0]
        zeros = [i for i in num if i ==0]
        #如果只有正数或负数
        if (len(positive) == 0 or len(negative)==0) and len(zeros)<3 :
            return []
        #两负一正的情况
        if len(negative)>1:
            for i in range(len(negative)-1):
                for j in range(i+1,len(negative)):
                    if -(negative[i] + negative[j]) in positive:
                        res.append([negative[i],negative[j],-(negative[i] + negative[j])])
        #一负一正的情况
        if 0 in num and len(negative)>=1 and len(positive)>=1:
            tem = [i for i in positive if -i in negative]
            for i in tem:
                res.append([-i,0,i])
        #三个零的情况:
        if len(zeros)>=3:
            res.append([0,0,0])
        # 两正一负的情况
        if len(positive)>1:
            for i in range(len(positive)-1):
                for j in range(i+1,len(positive)):
                    if -(positive[i] + positive[j]) in negative:
                        res.append([-(positive[i] + positive[j]),positive[i],positive[j]])
        #去重
        new_res = []
        for i in res:
            if i not in new_res:
                new_res.append(i)
        new_res.sort(key = lambda x:x[0])
        return new_res
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-04 15:20
牛客61197583...:看到室友一个个没怎么学通过关系直接入职或者接到面试,真的很难受。八股不知道背了多少遍,hot100也刷了1.5遍了,但就是没有面试的机会,唉
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务