##########################################################
该题目主要采用动态规划的思想,首先将列表排序,在遍历列表
的过程中先使用两个指针分别指向遍历的数字的下一个数以及最后一个数
如果和较大则后面的指针往前移,和较小则前面的指针往后移
直到遍历完列表。
##########################################################
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if len(nums)<3:
return []
nums.sort()
result = list()
for i in range(len(nums)-1):
if nums[i]>0: #后面的数都>=0,和不为0
return result
if (i > 0 and nums[i] == nums[i - 1]): #排除相同项
continue
p = i + 1
q = len(nums) - 1
sum = nums[i] + nums[p] + nums[q]
while(q>p):
if sum == 0:
result.append([nums[i],nums[p],nums[q]])
while (q>p and nums[q] == nums[q-1]): #排除相同项
q -= 1
while (q>p and nums[p] == nums[p+1]):
p += 1
p +=1
q -=1
sum = nums[i] + nums[p] + nums[q]
elif sum>0:
q -=1
sum = nums[i] + nums[p] + nums[q]
else:
p +=1
sum = nums[i] + nums[p] + nums[q]
return result