/**
思路:
四数之和转化为三数之和来做
思路和三数之和一样
*/
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
Arrays.sort(nums);
for(int i = 0; i < nums.length-3; i++){
if(i > 0 && nums[i] == nums[i-1])//第一个数去重
continue;
for(int j = i+1; j < nums.length-2; j++){
if(j > i+1 && nums[j] == nums[j-1])//第二个数去重
continue;
int k = j+1;
int l = nums.length-1;
while(k < l){
List<Integer> list = new ArrayList<>();
int sum = nums[i] + nums[j] + nums[k] + nums[l];
if(sum == target){
//list.add(nums[i]);
//list.add(nums[j]);
//list.add(nums[k]);
//list.add(nums[l]);
//res.add(list);
res.add(Arrays.asList(nums[i],nums[j],nums[k]
,nums[l]));
while(k < l && nums[k] == nums[k+1]){k++;}
while(k < l && nums[l] == nums[l-1]){l--;}
k++; l--;
}else if(sum < target){
k++;
while(k < l && nums[k-1] == nums[k]){k++;}
}else{
l--;
while(k < l && nums[l] == nums[l+1]){l--;}
}
}
}
}
return res;
}
}