题目描述
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
解题思路
使用双指针首先的要求就是有序数组,所以首先要对数组进行排序,其次,和两数之和思路一致。只不过需要先固定一个数,然后再使用双指针。所以循环固定每一个数,题目要求不能重复,所以对于重复的数值要去重处理
代码实现
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: # 先排序 nums.sort() res = [] for i in range(len(nums)): # 去重 if i>0 and nums[i] == nums[i-1]: continue # 固定一个数,剩下等同于找两数之和 low = i + 1 high = len(nums) - 1 while low < high: tempsum = nums[low] + nums[high] if tempsum>-nums[i]: high -= 1 elif tempsum<-nums[i]: low += 1 else: res.append([nums[i], nums[low], nums[high]]) # 答案去重,只移动一个指针 low += 1 high -= 1 while low<high and nums[low] == nums[low-1]: low += 1 return res 11