这篇文章是记录几个自己做这个题目的时候的一些Bug修改的觉得比较重要的知识点(忘记写的点一些),设计的主要知识点是:
- 双指针
- 循环到下一个不相同的元素
- 双指针的边界判断
- 指针变化的方法
- 排序
- 特殊情况判读
- 重复元素剔除
代码如下:
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
if len(nums)==4:
if sum(nums)==target:
return [nums]
else:
return []
ans=list()
for i in range(0,len(nums)-3):
if i!=0 and nums[i]==nums[i-1]:
continue
for j in range(i+1,len(nums)-2):
if j!=i+1 and nums[j]==nums[j-1]:
continue
l=j+1
r=len(nums)-1
while l<r:
sms=nums[i]+nums[j]+nums[l]+nums[r]
if sms==target:
if [nums[i],nums[j],nums[l],nums[r]] not in ans:
ans.append([nums[i],nums[j],nums[l],nums[r]])
print(ans)
l+=1
elif sms<target:
l0=l+1
while nums[l0]==nums[l] and r>l0:
l0+=1
l=l0
elif sms>target:
r0=r-1
while nums[r0]==nums[r] and r0>l:
r0-=1
r=r0
return ans