解法一:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList();
HashMap<Integer,Integer> map = new HashMap();
Arrays.sort(nums);
if(nums[0] == 0 && nums[nums.length-1] == 0){
List list = new ArrayList();
list.add(0);
list.add(0);
list.add(0);
res.add(list);
return res;
}
if(nums[0] > 0 || nums[nums.length-1] < 0){
return res;
}
for(int i = 0;i < nums.length-2;i++){
if(nums[i] > 0){
break;
}
if(i > 0 && (nums[i] == nums[i-1])){
continue;
}
int target = -nums[i];
map.clear();
map.put(nums[i+1],i+1);
for(int j = i+2;j < nums.length;j++){
if(map.containsKey(target-nums[j])){
int k = map.get(target-nums[j]);
List list = new ArrayList(3);
list.add(nums[k]);
list.add(nums[j]);
list.add(nums[i]);
Collections.sort(list);
res.add(list);
}
map.put(nums[j],j);
}
}
for(int i = 0;i < res.size()-1;i++){
for(int j = i + 1;j < res.size();j++){
if(res.get(i).equals(res.get(j))){
res.remove(j);
j--;
}
}
}
return res;
}
}
4/17/26About 3 min