1 public class Solution {
2 public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
3 ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
4 int len = num.length;
5 if(len<=3) return res;
6 Arrays.sort(num);
7 for(int i=0;i<=len-4;i++){
8 for(int j=i+1;j<=len-3;j++){
9 int sum = target - num[j]-num[i];
10 int start = j+1;
11 int end = len-1;
12 while(start<end){
13 if(num[start]+num[end]==sum){
14 ArrayList<Integer> temp = new ArrayList<Integer>();
15 temp.add(num[i]);
16 temp.add(num[j]);
17 temp.add(num[start]);
18 temp.add(num[end]);
19 res.add(temp);
20 start++;
21 end--;
22 while(start<end && num[start]==num[start-1]){
23 start++;
24 }
25 while(start<end && num[end]==num[end+1]){
26 end--;
27 }
28 }
29 else if(num[start]+num[end]>sum){
30 end--;
31 }
32 else{
33 start++;
34 }
35 }
36 while(j<len-3 &&num[j]==num[j+1]){
37 j++;
38 }
39 }
40 while(i<len-4 &&num[i]==num[i+1]){
41 i++;
42 }
43 }
44 return res;
45 }
46 }