3Sum LeetCode(java实现)

3Sum LeetCode(java实现)

[题目描述]
(https://leetcode.com/problems/3sum/)

解题方法

参照了leetcode上的解法,主要思想是将数组排序,然后用零减去第三个数,得到剩下两个数之和,再按照twosum的解法,求得剩下的两个数,在执行过程注意去重。

class Solution {
    public List> threeSum(int[] nums) {
    List> ret = new ArrayList>();   
    public List> threeSum(int[] num) {
        if (num == null || num.length < 3) return ret;
        Arrays.sort(num);
        int len = num.length;
        for (int i = 0; i < len-2; i++) {
            if (i > 0 && num[i] == num[i-1]) continue;
            find(num, i+1, len-1, num[i]); //寻找两个数与num[i]的和为0
        }
        return ret;
    } 
    public void find(int[] num, int begin, int end, int target) {
        int l = begin, r = end;
        while (l < r) {
            if (num[l] + num[r] + target == 0) {
                List ans = new ArrayList();
                ans.add(target);
                ans.add(num[l]);
                ans.add(num[r]);
                ret.add(ans); //放入结果集中
                while (l < r && num[l] == num[l+1]) l++;
                while (l < r && num[r] == num[r-1]) r--;
                l++;
                r--;
            } else if (num[l] + num[r] + target < 0) {
                l++;
            } else {
                r--;
            }
        }
    }

你可能感兴趣的:(3Sum LeetCode(java实现))