Given an array S of n integers, are there elements a, b, c, and d in S 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.
For example, given array S = [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差不多解法,注意重复的数要跳过!
class Solution {
public List<List<Integer>> answer1;
public List<List<Integer>> fourSum(int[] nums, int target) {
Arrays.sort(nums);
answer1=new ArrayList<List<Integer>>();
if(nums.length<4){
return answer1;
}
for(int i=0;i<=nums.length-4;i++){
if(i>0&&nums[i]==nums[i-1])
continue;
for(int j=nums.length-1;j>i+2;j--)
{
if(j<nums.length-1&&nums[j]==nums[j+1])
continue;
int start=i+1;
int end=j-1;
while(start<end){
int t=nums[i]+nums[start]+nums[end]+nums[j];
if(t==target){
List<Integer>answer=new ArrayList<Integer>();
answer.add(nums[i]);
answer.add(nums[start]);
answer.add(nums[end]);
answer.add(nums[j]);
answer1.add(answer);
while(start<end&&nums[start]==nums[start+1]) start++;
while(start<end&&nums[end]==nums[end-1]) end--;
}
if(t<target)
start++;
else
end--;
}
}
}
return answer1;
}
}