LeetCode 15 ——三数之和
考察思想:双指针
解题思路:1.设置左右指针 L,R ,当前数为 i
2. 设置空数组 res 来存放满足条件的三数之和
3. 将 数组进行sort, 因此 ,当num[i]>0时 即已不存在满足条件的三数
4. 若num[i] = num[i-1] ,即遇到重复数字,countiue下一数,移动左右指针 若三数之和大于0,则将num[R]像后移动一位,若小于0 则将num[L]像前移动一位。若等于0,将三数加入res中,并判断左 右指针的下一位是否重复,重复则跳过,否则,进入下一步
5. 返回 res
代码1(摘自 力扣官方题解)
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: n=len(nums) res=[] if(not nums or n<3): return [] nums.sort() res=[] for i in range(n): if(nums[i]>0): return res if(i>0 and nums[i]==nums[i-1]): continue L=i+1 R=n-1 while(L<R): if(nums[i]+nums[L]+nums[R]==0): res.append([nums[i],nums[L],nums[R]]) while(L<R and nums[L]==nums[L+1]): L=L+1 while(L<R and nums[R]==nums[R-1]): R=R-1 L=L+1 R=R-1 elif(nums[i]+nums[L]+nums[R]>0): R=R-1 else: L=L+1 return res