Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
//sort the num first
Arrays.sort(num);
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < num.length - 2 ; i++){
if(i-1>=0 && num[i]==num[i-1]){
continue;
}
int j = i+1;
int k = num.length - 1;
while(j < k){
if(j>i+1 && num[j] == num[j-1]){
j++;
continue;
}
if(k+1 < num.length && num[k] == num[k+1]){
k--;
continue;
}
if(num[j] + num[k] + num[i] < 0){
j++;
}else if(num[j] + num[k] + num[i] > 0){
k--;
}else{
ArrayList<Integer> tmp = new ArrayList<Integer>();
tmp.add(num[i]);
tmp.add(num[j]);
tmp.add(num[k]);
result.add(tmp);
j++;
k--;
}
}
}
return result;
}
}