LeetCode Python 18 四數之和

2021-09-23 15:27:31 字數 1601 閱讀 5873

給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,

b,c 和 d ,使得 a + b + c + d 的值與target相等?找出所有滿足條件且不重複的四元組。

注意:

答案中不可以包含重複的四元組。

示例:

給定陣列 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

滿足要求的四元組集合為:

[ [-1, 0, 0, 1],

[-2, -1, 1, 2],

[-2, 0, 0, 2]

]

思路:

在leetcode-python-15. 三數之和的基礎上再加一層迴圈。

class solution(object):

def foursum(self, n, target):

""":type nums: list[int]

:type target: int

:rtype: list[list[int]]

"""self.res =

n.sort()

# print n

def threesum(nums,t, d):

""":type nums: list[int]

:rtype: list[list[int]]

"""#固定a,用雙指標在排序陣列裡找兩數之和為-a

l = len(nums)

res =

for i, a in enumerate(nums):

if i == 0 or nums[i] > nums[i - 1]:

#開始雙指標

left, right = i + 1, len(nums) - 1

while(left < right):

s = a + nums[left] + nums[right]

# print d, a, nums[left], nums[right]

if s == t:

tmp = [d,a, nums[left], nums[right]]

left += 1

right -= 1

while left < right and nums[left] == nums[left - 1]:

left += 1

while right > left and nums[right] == nums[right + 1]:

right -= 1

elif s < t:

left += 1

elif s > t:

right -= 1

for i in range(len(n) - 3):

if i == 0 or n[i] > n[i - 1]:

# print n[i]

threesum(n[i + 1:], target - n[i], n[i])

return self.res

LeetCode python 1 兩數之和

題目鏈結 難度 簡單 型別 雜湊表 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因...

LeetCode Python刷題 1 兩數相加

題目 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 返回 0,1 為了測試 是否重複利用陣列元...

LeetCode python 第1題 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...