LeetCode15 三数之和(Java实现)

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享