Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
The solution set must not contain duplicate quadruplets.
Example:
Given array nums = [1, 0, -1, 0, -2, 2], and target = 0.
A solution set is:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
思路:和前面的3sum一样的思路,多加一层循环即可解决
package com.Ryan;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class FourSum {
public static void main(String[] args) {
FourSum fSum=new FourSum();
int[] nums= {0,0,0,0};
int target=1;
System.out.println(fSum.fourSum(nums, target));
}
public List<List<Integer>> fourSum(int[] nums, int target) {
Set<List<Integer>> res=new HashSet<>();
Arrays.sort(nums);
for (int l = 0; l < nums.length-3; l++) {
for (int i = l+1; i < nums.length-2; i++) {
int j=i+1,k=nums.length-1,sum;
while (j<k) {
sum=nums[l]+nums[i]+nums[j]+nums[k];
if (sum==target) {
res.add(Arrays.asList(nums[l],nums[i],nums[j++],nums[k--]));
}
else if (sum<target) {
j++;
}
else if (sum>target) {
k--;
}
}
}
}
return new LinkedList<>(res);
}
}