用set去重应该办不到 0 0 0 的case没法通过,用map可以处理,不过超时,放出来大家看下:
public List<List<Integer>> threeSum(int[] nums) {
if (nums == null || nums.length < 3) {
return Collections.emptyList();
}
Map<Integer, Integer> map = new HashMap<>();
for (int i : nums) {
put(map,i);
}
Set<List<Integer>> tmpRes = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
remove(map,nums[i]);
remove(map,nums[j]);
int third = -nums[i] - nums[j];
if(map.get(third) != null) {
List<Integer> tmp =Arrays.asList(nums[i], nums[j], third);
Collections.sort(tmp);
tmpRes.add(tmp);
}
put(map,nums[i]);
put(map,nums[j]);
}
}
return new ArrayList<>(tmpRes);
}
private void put(Map<Integer, Integer> map, Integer key) {
Integer val = map.get(key);
map.put(key, val == null ? 1 : ++val);
}
private void remove(Map<Integer, Integer> map, Integer key) {
Integer val = map.get(key);
map.put(key, val == 1 ? null : --val);
}
展开