leetcode三數字之和python

2021-09-26 12:00:02 字數 1526 閱讀 2442

本題的關鍵是找出所有的組合,然後去除重複的組合。

首先對陣列進行排序,便於查詢。然後設定三個指標:定點k,首指標i,尾指標j。

然後初始化定點k=0,首指標i=k + 1, 尾指標j=len(nums) -1

再對三個數進行求和,如果大於0,尾指標減1,(為了除去重複的,需要判斷-1後的尾指標所指向的值是否和之前的相同,如果相同,則尾指標繼續減1,但是要確保i一直小於j)。

如果小於0,首指標加1(同時也要進行去除重複的操作)

如果等於0,儲存下來,之後i+1,j-1,同樣要進行去除重複的操作。

如果i=j,則進行重新初始化;k = k + 1, i = k + 1, j = len(nums) - 1。

按照上述思路找出所有組合

class

solution

:def

threesum

(self, nums: list[

int])-

> list[list[

int]]:

# class solution:

# def threesum(self, nums):

nums.sort(

)print

(nums)

res_num =

for k in

range

(len

(nums)-1

):if nums[k]

>0:

return res_num

if k >

0and nums[k]

== nums[k -1]

:continue

i = k +

1 j =

len(nums)-1

# s = nums[k] + nums[i] + nums[j]

#一直進行如下迴圈,直到i==j

while i < j:

temp =

s = nums[k]

+ nums[i]

+ nums[j]

# print(s)

if s ==0:

)))

i = i +

1print

(i)while nums[i]

== nums[i -1]

and i < j:

i +=

1 j -=

1while nums[j]

== nums[j +1]

and i < j:

j -=

1elif s >0:

j = j -

1while nums[j]

== nums[j +1]

and i < j:

j = j -

1elif s <0:

i = i +

1while nums[i]

== nums[i -1]

and i < j:

i = i +

1return res_num

leetcode 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 因為這次是要求輸出對應的三...

LeetCode 三數之和

題目描述 給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目分析 有序陣...

Leetcode 三數之和

解決方案一 class solution else if nums j nums k target else while i 1 1 i return lllist 解決方案2 class solution 如果有3個0,就直接作為乙個解 if zerosize 3 res.add arrays.a...