Skip to content

Commit 4d421e1

Browse files
committed
3sum solution
1 parent b9c6be1 commit 4d421e1

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

3sum/radiantchoi.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution:
2+
def twoSum(self, target: int, nums: List[int], starting: int) -> List[List[int]]:
3+
left = starting
4+
right = len(nums) - 1
5+
6+
result = []
7+
8+
while left < right:
9+
if nums[left] + nums[right] == target:
10+
result.append([nums[left], nums[right]])
11+
left += 1
12+
right -= 1
13+
14+
while left < right and nums[left] == nums[left - 1]:
15+
left += 1
16+
17+
while left < right and nums[right] == nums[right + 1]:
18+
right -= 1
19+
elif nums[left] + nums[right] > target:
20+
right -= 1
21+
else:
22+
left += 1
23+
24+
return result
25+
26+
def kSum(self, n: int, target: int, nums: List[int], starting: int) -> List[List[int]]:
27+
if n < 2 or starting == len(nums):
28+
return []
29+
elif n == 2:
30+
return self.twoSum(target, nums, starting)
31+
32+
result = []
33+
34+
for i in range(starting, len(nums) - n + 1):
35+
if i > starting and nums[i] == nums[i - 1]:
36+
continue
37+
38+
for tail in self.kSum(n - 1, target - nums[i], nums, i + 1):
39+
result.append([nums[i]] + tail)
40+
41+
return result
42+
43+
def threeSum(self, nums: List[int]) -> List[List[int]]:
44+
nums.sort()
45+
return self.kSum(3, 0, nums, 0)

0 commit comments

Comments
 (0)