最近在刷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
最后通过了,如图所示