目录

18 四数之和

1
2
3
4
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
### 注意:

答案中不可以包含重复的四元组。
示例:
1
2
3
4
5
6
7
8
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

满足要求的四元组集合为:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]
解法1:回溯法
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution:
    def fourSum(self, nums, target: int):
        if len(nums) < 4:
            return []

        output = []

        def backtrack(path, next):
            if len(path) == 4:
                output.append(sorted(path))
                return

            for index, element in enumerate(next):
                path.append(element)
                backtrack(path, next[index + 1:])
                path.pop()

        backtrack([], nums)

        result = []
        for element in output:
            if sum(element) == target and element not in result:
                result.append(element)

        return result