# 给你一个整数数组nums ,判断是否存在三元组[nums[i], nums[j], nums[k]] # 满足i != j、i != k且j != k ,同时还满足 # nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为0且不重复的三元组。 # # 注意:答案中不可以包含重复的三元组。 # # 示例1: # 输入:nums = [-1, 0, 1, 2, -1, -4] # 输出:[[-1, -1, 2], [-1, 0, 1]] # 解释: # nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。 # nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。 # nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。 # 不同的三元组是[-1, 0, 1]和[-1, -1, 2] 。 # 注意,输出的顺序和三元组的顺序并不重要。 # # 示例2: # 输入:nums = [0, 1, 1] # 输出:[] # 解释:唯一可能的三元组和不为0 。 # # 示例3: # 输入:nums = [0, 0, 0] # 输出:[[0, 0, 0]] # 解释:唯一可能的三元组和为0 。 nums = [-1, 0, 1, 2, -1, -4] nums = [0, 0, 0, 0] # nums = [-1, 0, 1, 2, -1, -4] def get_conmbinations(nums): res = [] nums = sorted(nums) # print(nums) if nums[0] > 0 and len(nums) > 0: return [] for i in range(len(nums)-2): if i > 0 and nums[i] == nums[i-1]: continue left = i + 1 right = len(nums)-1 # print('i=', i) # 左闭右闭 while left < right: tem = nums[i] + nums[left] + nums[right] if tem > 0: right -= 1 while left < right and nums[right] == nums[right+1]: right -= 1 elif tem < 0: left += 1 while left <right and nums[left] ==nums[left-1]: left +=1 else: res.append([nums[i], nums[left], nums[right]]) right -= 1 left += 1 while left < right and nums[right] == nums[right+1]: right -= 1 while left < right and nums[left] == nums[left - 1]: left += 1 return res print(get_conmbinations(nums))