4sum

public class Solution {

    public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {

        // the same as 3sum

        ArrayList<ArrayList<Integer>> res =  new ArrayList<ArrayList<Integer>>();

        if(num==null|| num.length<4) return res;

        Arrays.sort(num); // 为啥又忘

        

        HashSet<ArrayList<Integer>> hs = new HashSet<ArrayList<Integer>>();

        

        for(int i=0; i<num.length-3; i++){

            for(int j=i+1; j<num.length-2; j++){

                int low = j+1, high = num.length-1;

                while(low<high){

                    int sum = num[i]+num[j]+num[low]+num[high];

                    if(sum==target){ // 看见兔子target,才下套 tmp

                        ArrayList<Integer> tmp = new ArrayList<Integer>();

                        tmp.add(num[i]);

                        tmp.add(num[j]);

                        tmp.add(num[low]);

                        tmp.add(num[high]);

                        if(!hs.contains(tmp)){

                            hs.add(tmp);

                            res.add(tmp);

                        }

                        low++;

                        high--;

                    }else if(sum<target){

                        low++;

                    }else

                        high--;

                }

            }

        }

        return res;

    }

}

 

你可能感兴趣的:(SUM)