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)
Code:
public class Solution {
public ArrayList<String> threeSum(int[] num) {
ArrayList<String> list = new ArrayList<String>();
HashSet<String> all = new HashSet<String>();
Arrays.sort(num);
for (int i = 0; i < num.length - 2; i++) {
int j = i + 1;
int z = num.length - 1;
while (j < z) {
if (num[i] + num[j] + num[z] == 0) {
String str = num[i] + ", " + num[j] + ", " + num[z];
all.add(str);
j++;
z--;
} else if (num[i] + num[j] + num[z] > 0) {
z--;
} else {
j++;
}
}
}
for (String str : all) {
String[] items = str.split(" ");
ArrayList<String> triplet = new ArrayList<String>();
list.add(triplet);
}
return list;
}
}