public ArrayList<ArrayList<Integer>> threeSum(int[] nums) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(nums.length<3||nums==null){
return res;}
Arrays.sort(nums);
for(int i=0;i<nums.length-2;i++){
if(i!=0&&nums[i]==nums[i-1]){
continue;
}
int start = i+1;
int last = nums.length-1;
while(start<last){
int sum = nums[start]+nums[last]+nums[i];
if(sum==0){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(nums[i]);
list.add(nums[start]);
list.add(nums[last]);
start++;
last--;
res.add(list);
while(start<last&&nums[start]==nums[start-1]){
start++;
}
while(start<last&&nums[last] == nums[last+1]){
last--;
}
}
else if(sum>0){
last--;
}
else{
start++;
}}
}return res;
}