題目:
解法:
- 先對數組從小到大排序榄审。
- 最外層遍歷整個數組,再設置兩個雙指針杆麸,當三數之和小于0時搁进,右指針向左移動一位;當三數之和大于0時角溃,左指針向右移動一位拷获。
- 結果中會遇到重復的結果,所以設置一個set减细,用于存放不重復的數組匆瓜。
具體代碼如下:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
res_list = []
res = set()
nums.sort()
for i in range(len(nums)):
left, right = i+1, len(nums)-1 # 雙指針
while left < right:
if nums[i]+nums[left]+nums[right]>0:
right -= 1
elif nums[i]+nums[left]+nums[right]<0:
left += 1
else:
res.add((nums[i],nums[left],nums[right]))
left += 1
right -= 1
for r in res:
res_list.append(list(r))
return res_list