leetcode-----15. 三数之和

代码

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> ans = new ArrayList();
        int n = nums.length;

        if (nums == null || n < 3) return ans;

        for (int i = 0; i < n; ++i) {
            if (nums[i] > 0) break;
            if (i > 0 && nums[i] == nums[i - 1]) continue;
            int l = i + 1;
            int r = n - 1;

            while (l < r) {
                int sum = nums[i] + nums[l] + nums[r];
                if (sum == 0) {
                    ans.add(Arrays.asList(nums[i], nums[l], nums[r]));
                    while (l < r && nums[l] == nums[l + 1]) l++;
                    while (l < r && nums[r] == nums[r - 1]) r--;
                    l++; 
                    r--;
                } else if (sum < 0) l++;
                else r--;
            }
        }
        return ans;
    }
}
posted @ 2020-06-13 16:12  景云ⁿ  阅读(85)  评论(0)    收藏  举报