[Leetcode] 15. 3Sum
https://leetcode.com/problems/3sum/주어진 정수 배열에서 세 개의 합이 0이 되는 모든 unique triplet을 찾는 문제
- 동일한 triplet이 포함되어서는 안 된다. (중복을 허용하지 않는다.)
- 세 값의 합이 0이 되는 triplet이 존재하지 않을 경우, 빈 리스트([])를 리턴한다.
Example 1
- Input : nums = [-1, 0, 1, 2, -1, -4]
- Output : [[-1, 0, 1], [-1, -1, 2]]
Example 2
- Input : nums = [0, 1, 1]
- Output : []
Example 3
- Input : nums = [0, 0, 0]
- Output : [0, 0, 0]
Note
set을 사용하여 중복되는 값을 처리한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if len(nums) < 3 :
return []
nums.sort()
res = set()
l = len(nums)
for i in range(l) :
if nums[i] > 0 :
break
target = -nums[i]
j, k = i + 1, l - 1
while j < k :
temp = nums[j] + nums[k]
if temp < target :
j += 1
elif temp > target :
k -= 1
else :
res.add((nums[i], nums[j], nums[k]))
j += 1
k -= 1
return list(res)