========堅持30天刷leetcode=====
題目鏈接:https://leetcode-cn.com/problems/3sum/
分析:
本題承接?第1題?而來,第1題題目給定數組和target,在數組內尋找兩個數a、b,使得 a+b=target 。在本題中 a+b+c=0 ,可以理解為: a+b=-c ,即 :依次把數組的每一個元素當成 負的target,運用第一題的思路,稍作修改即可AC。
注意點:本題要求返回的是 值列表,而不是第一題的索引列表;值列表不可重復,需要去重
class Solution:
def twoSum(self, nums, target): # 第一題思路,做了部分修改
h = {}
hlist=[]
k=None # 去重;標識是否已經將 相同的值對 添加進了hlist
for i, num in enumerate(nums):
if ((target - num) in h) and k!=(target - num):
hlist.append([nums[h[target - num]],nums[i]])
k=target-num
h[num] = i
return hlist
def threeSum(self, nums):
nums.sort() # 排序操作,為了去重
ll=len(nums)
result=[]
for i in range(ll):
if i!=0 and nums[i]==nums[i-1]: # 去重;已經對相同的值做了遍歷尋找
continue
else:
tmp=self.twoSum(nums[i+1:], -nums[i])
if tmp:
for k in tmp: # 可能有多個值對符合條件
#print(k)
ltmp=[]
ltmp.append(nums[i])
ltmp=ltmp+k
result.append(ltmp)
#print(result)
return result
?
?
?
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
