题目描述:
题解一:回溯 超时
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: result = [] def helper(nums,start,nowl,nowsum): if len(nowl)==3 and nowsum==0 and sorted(nowl) not in result: result.append(sorted(nowl[:])) return for i in range(start,len(nums)): nowl.append(nums[i]) nowsum = nowsum+nums[i] helper(nums,i+1,nowl,nowsum) nowsum = nowsum-nums[i] nowl.pop() helper(nums,0,[],0) return result
题解二:双指针
思路:固定一个数字nums[i],在nums[i+1]-nums[-1]之间采用双指针的方法,相当于确定两个数字之和为-nums[i]
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: result = [] nums = sorted(nums) for i in range(len(nums)): target = -nums[i] left = i+1 right = len(nums)-1 while left<right: if nums[left]+nums[right]==target: l = [nums[i],nums[left],nums[right]] if sorted(l) not in result: result.append(sorted(l)) left = left+1 right = right-1 elif nums[left]+nums[right]<target: left = left+1 else: right = right-1 return result