题目:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
示例:
输入:
给定数组 nums = [-1, 0, 1, 2, -1, -4]
输出:
[
[-1, 0, 1],
[-1, -1, 2]
]
代码:
public class Test11 {
public static void main(String[] args) {
int[] test = new int[]{-4,-2,1,-5,-4,-4,4,-2,0,4,0,-2,3,1,-5,0};
List<List<Integer>> lists = new Test11().threeSum(test);
for (List<Integer> list : lists) {
for (Integer integer : list) {
System.out.print(integer+",");
}
System.out.println();
}
}
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
Arrays.sort(nums);
for (int i = 0; i < nums.length-2; i++) {
for (int j = i+1; j < nums.length-1; j++) {
for (int k = j+1; k < nums.length; k++) {
if (nums[i]+nums[j]+nums[k]==0) {
List<Integer> integers = Arrays.asList(new Integer[]{nums[i], nums[j], nums[k]});
if (result.size()==0) {
result.add(integers);
continue;
}
int l=0;
for(;l<result.size();l++){
if (result.get(l).containsAll(integers) && integers.containsAll(result.get(l))) {
break;
}
}
if (l==result.size()) {
result.add(integers);
}
}else if (nums[i]+nums[j]+nums[k]>0){
break;
}
}
}
}
return result;
}
}