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