//先进行排序,然后转换成数组,在三数之和的基础上再加上一层for循环就可以解这道题目。
public class Solution {
public ArrayList<ArrayList<Integer>> fournumber (ArrayList<Integer> nums, int target) {
// write code here
//
ArrayList<Integer> collect = (ArrayList<Integer>)nums.stream().sorted().collect(Collectors.toList());
int[] num = new int[collect.size()];
for (int i = 0; i < collect.size(); i++) {
num[i]=collect.get(i);
}
return threeSum(num,target);
}
public ArrayList<ArrayList<Integer>> threeSum(int[] num,int target) {
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
if(num==null || num.length<4){
return res;
}
for(int i=0;i<num.length;i++){
if(i>0 && num[i]==num[i-1]){
continue;// 去重
}
for(int j=i+1;j< num.length;j++){
if(j>i+1 && num[j]==num[j-1]){
continue;// 去重
}
int L=j+1;
int R=num.length-1;
while(L<R){
int sum=num[i]+num[L]+num[R]+num[j];
if(sum==target){
ArrayList<Integer> list=new ArrayList<>();
list.add(num[i]);
list.add(num[L]);
list.add(num[R]);
list.add(num[j]);
res.add(list);
while(L<R && num[L]==num[L+1]){
L++;
}
while(L<R && num[R]==num[R-1]){
R--;
}
//不等于的时候再加1
L++;
R--;
}
else if(sum>target){
R--;
}
else {
L++;
}
}
}
}
return res;
}
}