一、问题描述
给你一个整数数组 nums
,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j
、i != k
且 j != k
,同时还满足 nums[i] + nums[j] + nums[k] == 0
。请
你返回所有和为 0
且不重复的三元组。
注意:答案中不可以包含重复的三元组。
二、解题思路
1.问题分析
2.解题代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
Set<String> visited = new HashSet<>();
List<List<Integer>> results = new ArrayList<>();
for(int i=0;i<nums.length-2;++i){
int j=i+1, k= nums.length-1;
while(j<k){
if(nums[i]+nums[j]+nums[k]==0){
String f = nums[i]+"#"+nums[j]+"#"+nums[k];
if(!visited.contains(f)){
ArrayList<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
results.add(list);
}
visited.add(f);
j ++;
k--;
}else if(nums[i]+nums[j]+nums[k] > 0){
k--;
}else if(nums[i]+nums[j]+nums[k] < 0) {
j++;
}
}
}
return results;
}
}