LeetCode T18

在这里插入图片描述

class Solution:
    def fourSum(self, nums, target):
        d=dict()
        
        n = len(nums)
        
        if n<4:
            return []
        if n == 4:
            if sum(nums)==target:
                return [nums]
        
        # 遍历一次,计算两个数的和,存在字典里,键是两数之和
        # 值是一个列表,存储所有符合条件的两数索引的列表
        # 如 [1,2,3,4,1] 算两数和为5,则有:5:[[0,3],[1,2],[3,4]]
        for i in range(n):
            for j in range(i+1,n):
                if nums[i]+nums[j] not in d.keys():
                    d[nums[i]+nums[j]] = [[i,j]]
                else:
                    d[nums[i]+nums[j]].append([i,j])
        # 结果列表
        result= []
        for i in range(n):
            for j in range(i+1,n):
                # 目标值减去两数的差,在字典中能找到,但索引不重复(值可以相同,但在原数组列表的位置不同)
                for a,b in d.get(target-nums[i]-nums[j],[]):
                    # 索引集合
                    temp={
    
    i,j,a,b}
                    # 如果索引值都不重复
                    if len(temp)==4:
                        # 排序是为了方便判断后序满足条件的列表在不在结果列表里
                        # 如果在,直接过滤掉
                        sumList = sorted([nums[t] for t in temp])
                        if sumList not in result:
                            result.append(sumList)
        return result

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wjl__ai__/article/details/112158557