NO.18四数之和

#三数之和双指针循环外再加一个循环,但有些细节还是在里面的,需注意
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
    res = [] #设置空列表做返回值
    if len(nums)<4 :
        return res
    if len(nums)==4 and nums[0]+nums[1]+nums[2]+nums[3]==target:
        return [nums]
    nums.sort() #还是需要排序(从小到大)
    i=0
    while i<len(nums)-3:#for循环也可
        j=i+1
        while j<len(nums)-2:
            l,r = j+1,len(nums)-1
            while l<r:
                quadruplets = [nums[i],nums[j],nums[l],nums[r]]
                sum = nums[i]+nums[j]+nums[l]+nums[r]
                if (sum == target) :
                    res.append(quadruplets)
                    while (l < len(nums) and quadruplets[2] == nums[l]): #此时不用if的原因是排除连续的重复值
                        l += 1
                    while (r > 0 and quadruplets[3] == nums[r]):
                        r-= 1
                elif sum<target:
                    l+=1
                else:
                    r-=1                           
            while (j < len(nums) - 2 and nums[j] == nums[j + 1]):#排除j的重复值
                j += 1
            j += 1
        while (i < len(nums) - 3 and nums[i] == nums[i + 1]):#排除i的重复值
            i += 1
        i += 1

    return res

 

 

 

 
 
posted @ 2022-07-11 15:01  是冰美式诶  阅读(25)  评论(0)    收藏  举报