public class Solution {
public List<List<Integer>> threeSum(int[] num)
{
ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
Arrays.sort(num);
for (int i=0; i < num.length; i++) {
int start = i + 1, end = num.length-1;
while (start < end) {//Two pointers
int sum = num[i] + num[start] + num[end];
if (sum == 0) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(num[i]);
list.add(num[start]);
list.add(num[end]);
result.add(list);//存储结果
start++;
end--;
while((start < end) && num[start] == num[start-1]) start++; //remove duplicates
while((start < end) && num[end] == num[end+1]) end--;
}
else if (sum < 0) {
start++;
while((start < end) && num[start] == num[start-1]) start++; //remove duplicates
} else {
end--;
while((start < end) && num[end] == num[end+1]) end--; //remove duplicates
}
}
while (i+1 < num.length && num[i+1] == num[i]) //remove duplicates
i++;
}
return result;
}
}