这道题和3Sum那道题十分类似,只是把3sum 中的0换成了target-num【i】,直接上代码。
public List<List<Integer>> fourSum(int[] num, int target) {
List<List<Integer>> array=new ArrayList();
if(num == null||num.length < 4)
return array;
Arrays.sort(num);
List<Integer> list=new ArrayList();
for(int i=0;i<=num.length-4;i++)
{
if(i>0&&num[i] == num[i-1])
continue;
int begin=i+1;
int threesum=target-num[i];
for(int j=begin;j<=num.length-3;j++)
{
if(j>begin&&num[j] == num[j-1])
continue;
int left=j+1;
int right=num.length-1;
while(left<right)
{
int ans=num[j]+num[left]+num[right];
if(ans == threesum)
{
list.add(num[i]);
list.add(num[j]);
list.add(num[left]);
list.add(num[right]);
array.add(list);
list=new ArrayList();
left++;
while(left<right&&num[left] == num[left-1])
left++;
right--;
while(left<right&&num[right] == num[right+1])
right--;
}else if(ans<threesum)
left++;
else
right--;
}
}
}
return array;
}