|
1 | 1 | classSolution:
|
2 |
| -defThreeSum(self,integers): |
3 |
| -""" |
4 |
| - :type integers: List[int] |
5 |
| - :rtype: List[List[int]] |
6 |
| - """ |
7 |
| -integers.sort() |
8 |
| -result= [] |
9 |
| -forindexinrange(len(integers)): |
10 |
| -ifintegers[index]>0: |
| 2 | +defthreeSum(self,nums:List[int])->List[List[int]]: |
| 3 | +res= [] |
| 4 | +nums.sort() |
| 5 | + |
| 6 | +fori,ainenumerate(nums): |
| 7 | +# Skip positive integers |
| 8 | +ifa>0: |
11 | 9 | break
|
12 |
| -ifindex>0andintegers[index]==integers[index-1]: |
| 10 | + |
| 11 | +ifi>0anda==nums[i-1]: |
13 | 12 | continue
|
14 |
| -left,right=index+1,len(integers)-1 |
15 |
| -whileleft<right: |
16 |
| -ifintegers[left]+integers[right]<0-integers[index]: |
17 |
| -left+=1 |
18 |
| -elifintegers[left]+integers[right]>0-integers[index]: |
19 |
| -right-=1 |
| 13 | + |
| 14 | +l,r=i+1,len(nums)-1 |
| 15 | +whilel<r: |
| 16 | +threeSum=a+nums[l]+nums[r] |
| 17 | +ifthreeSum>0: |
| 18 | +r-=1 |
| 19 | +elifthreeSum<0: |
| 20 | +l+=1 |
20 | 21 | else:
|
21 |
| -result.append([integers[index],integers[left],integers[right]])# After a triplet is appended, we try our best to incease the numeric value of its first element or that of its second. |
22 |
| -left+=1# The other pairs and the one we were just looking at are either duplicates or smaller than the target. |
23 |
| -right-=1# The other pairs are either duplicates or greater than the target. |
24 |
| -# We must move on if there is less than or equal to one integer in between the two integers. |
25 |
| -whileintegers[left]==integers[left-1]andleft<right: |
26 |
| -left+=1# The pairs are either duplicates or smaller than the target. |
27 |
| -returnresult |
| 22 | +res.append([a,nums[l],nums[r]]) |
| 23 | +l+=1 |
| 24 | +r-=1 |
| 25 | +whilenums[l]==nums[l-1]andl<r: |
| 26 | +l+=1 |
| 27 | + |
| 28 | +returnres |