# 15-3sum Try it on leetcode ## Description

Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.

Notice that the solution set must not contain duplicate triplets.

 

Example 1:

Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]

Example 2:

Input: nums = []
Output: []

Example 3:

Input: nums = [0]
Output: []

 

Constraints:

## Solution(Python) ```Python class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: nums.sort() return self.KSum(nums, 0, 3) def KSum(self, nums, target, k): n = len(nums) if not n: return [] average = target // k if average < nums[0] or average > nums[-1]: return [] if k == 2: return self.twosum(nums, target) res = [] for i in range(n): if i == 0 or nums[i] != nums[i - 1]: for subset in self.KSum(nums[i + 1:], target - nums[i], k - 1): res.append([nums[i]] + subset) return res def twosum(self, nums, target): lo = 0 n = len(nums) hi = n - 1 res = [] while lo < hi: curr_sum = nums[lo] + nums[hi] if curr_sum < target or (lo > 0 and nums[lo] == nums[lo - 1]): lo += 1 elif curr_sum > target or (hi < len(nums) - 1 and nums[hi] == nums[hi + 1]): hi -= 1 else: res.append([nums[lo], nums[hi]]) lo += 1 hi -= 1 return res ```