0%

LeetCode.四数之和

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

  • 示例:
    给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
    满足要求的四元组集合为:
    [[-1, 0, 0, 1], [-2, -1, 1, 2],[-2, 0, 0, 2]]

解法:

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
26
27
28
29
30
31
32
object FourNumSum {
def main(args: Array[String]): Unit = {
println(solution1(Array(1, 0, -1, 0, -2, 2), 0))
}

def solution1(nums: Array[Int], target: Int): List[List[Int]] = {
if (nums.length == 4 && nums(0) + nums(1) + nums(2) + nums(3) == target) {
return List(nums.toList)
}
var res = Set[List[Int]]()
java.util.Arrays.sort(nums)
for (i <- 0 until nums.length - 3) {
for (j <- i + 1 until nums.length - 2) {
var l = j + 1;
var r = nums.length - 1
while (l < r) {
if (nums(i) + nums(j) + nums(l) + nums(r) > target) {
r -= 1
} else if (nums(i) + nums(j) + nums(l) + nums(r) < target) {
l += 1
} else {
res += List(nums(i), nums(j), nums(l), nums(r))
l += 1
}
}
}
}

res.toList
}
}