LeetCode15 三数之和(Java实现)
题目描述:
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
复制代码
代码:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
// 先对这个数组排序
Arrays.sort(nums);
int len = nums.length;
// 因为要不重复的,借用HashSet
HashSet<List<Integer>> res = new HashSet<>();
for(int i = 0;i < len;i++) {
//使用左右两个指针
int L = i + 1;
int R = len - 1;
while(L < R) {
if(nums[i]+nums[L]+nums[R] == 0) {
// 将符合条件的加入到set集合中
res.add(Arrays.asList(nums[i],nums[L],nums[R]));
L++;
R--;
} else if (nums[i]+nums[L]+nums[R] < 0) {
L++;
} else {
R--;
}
}
}
List<List<Integer>> list = new ArrayList<>();
// 将结果加入到list中,返回
list.addAll(res);
return list;
}
}
复制代码
image.png
网友评论