leetcode-hard-array-454 4sum II-NO

mycode   过不了。。。我也不知道为什么。。。

class Solution(object):
    def fourSumCount(self, A, B, C, D):
        """
        :type A: List[int]
        :type B: List[int]
        :type C: List[int]
        :type D: List[int]
        :rtype: int
        """
        def deal(i,j,k,l):
            if [i,j,k,l] not in self.record:
                self.record.append([i,j,k,l])
            else:
                return 
            #print(self.res,i,j,k,l)
            if i < I and j < J and k < K and l < L:
                if A[i] + B[j] + C[k] + D[l] == 0:
                    self.res += 1
                    print(self.res,i,j,k,l)
                elif A[i] + B[j] + C[k] + D[l] < 0:
                    deal(i,j,k,l+1)
                    deal(i,j,k+1,l)
                    deal(i,j+1,k,l)
                    deal(i+1,j,k,l)
                else:
                    return 
            else:
                return 
            
        A,B,C,D = sorted(A),sorted(B),sorted(C),sorted(D)
        i,j,k,l = 0,0,0,0
        I,J,K,L = len(A),len(B),len(C),len(D)
        self.res = 0
        self.record = []
        deal(i,j,k,l)
        return self.res

参考

class Solution(object):
    def fourSumCount(self, A, B, C, D):
        """
        :type A: List[int]
        :type B: List[int]
        :type C: List[int]
        :type D: List[int]
        :rtype: int
        """
        
        from collections import Counter
        dicA , dicB ,dicC ,dicD = Counter(A), Counter(B), Counter(C), Counter(D)
        res = 0
        dic = {}
        for a , a_nember in dicA.items():
            for b , b_nember in dicB.items():
                dic[a+b] = dic.get(a+b,0) + a_nember * b_nember 
#例如2+(-1)=1,而A中2的数量*B中-2的数量+B中2的数量*A中-2的数量就等于A和B中元素和为1的组合数
for c, c_nember in dicC.items(): for d, d_nember in dicD.items(): res += dic.get(-c-d,0) * c_nember * d_nember return res
原文地址:https://www.cnblogs.com/rosyYY/p/11038716.html