neetcode/medium/3sum.py

54 lines
1.6 KiB
Python

#!/usr/bin/python
# yigid balaban <fyb@fybx.dev>
# neetcode 2024
# 3sum
def solution0(nums: list[int]) -> list[list[int]]:
if len(nums) < 3:
return []
if len(nums) == 3 and sum(nums) == 0:
return [nums]
nums = sorted(nums)
triples = []
def comb(what: list[int], head: int):
mtriples = []
for p0 in range(0, len(what) + 1):
for p1 in range(p0, len(what)):
if p1 != p0 and head + what[p0] + what[p1] == 0:
triple = sorted([head, what[p0], what[p1]])
if triple not in triples and triple not in mtriples:
mtriples.append(triple)
return mtriples
for p in range(len(nums) - 3):
triples.extend(comb(nums[p + 1:], nums[p]))
return triples
def solution(nums: list[int]) -> list[list[int]]:
if len(nums) < 3:
return []
if len(nums) == 3:
if sum(nums) == 0: return [nums]
else: return []
r = []
s = []
for p0 in range(len(nums)):
for p1 in range(p0 + 1, len(nums)):
inverse = -1 * (nums[p0] + nums[p1])
if inverse in set(nums[p1+1:]) and set({nums[p0], nums[p1], inverse}) not in s:
r.append([nums[p0], nums[p1], inverse])
s.append({nums[p0], nums[p1], inverse})
return list(map(lambda ss: list(ss), r))
print(solution([0,0]) == [])
print(solution([-1,0,1,2,-1,-4]), solution([-1,0,1,2,-1,-4]) == [[-1,-1,2],[-1,0,1]])
print(solution([0,1,1]) == [])
print(solution([0,0,0]) == [[0,0,0]])
print(solution([0,0,0,0]) == [[0,0,0]])