本題的關鍵是找出所有的組合,然後去除重複的組合。
首先對陣列進行排序,便於查詢。然後設定三個指標:定點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...