LeetCode 三數之和,Python實現
阿新 • • 發佈:2018-11-12
最近在刷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
最後通過了,如圖所示