========堅(jiān)持30天刷leetcode=====
題目鏈接:https://leetcode-cn.com/problems/3sum/
分析:
本題承接?第1題?而來(lái),第1題題目給定數(shù)組和target,在數(shù)組內(nèi)尋找兩個(gè)數(shù)a、b,使得 a+b=target 。在本題中 a+b+c=0 ,可以理解為: a+b=-c ,即 :依次把數(shù)組的每一個(gè)元素當(dāng)成 負(fù)的target,運(yùn)用第一題的思路,稍作修改即可AC。
注意點(diǎn):本題要求返回的是 值列表,而不是第一題的索引列表;值列表不可重復(fù),需要去重
class Solution:
def twoSum(self, nums, target): # 第一題思路,做了部分修改
h = {}
hlist=[]
k=None # 去重;標(biāo)識(shí)是否已經(jīng)將 相同的值對(duì) 添加進(jìn)了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]: # 去重;已經(jīng)對(duì)相同的值做了遍歷尋找
continue
else:
tmp=self.twoSum(nums[i+1:], -nums[i])
if tmp:
for k in tmp: # 可能有多個(gè)值對(duì)符合條件
#print(k)
ltmp=[]
ltmp.append(nums[i])
ltmp=ltmp+k
result.append(ltmp)
#print(result)
return result
?
?
?
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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