给定一个包含 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 } }
|