1. 程式人生 > >LeetCode 三數之和,Python實現

LeetCode 三數之和,Python實現

最近在刷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

最後通過了,如圖所示
這裡寫圖片描述