leetcode 15. 3Sum

 

public class Solution {
    
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    public List<List<Integer>> threeSum(int[] nums) {
        
        if(nums.length < 3 || nums == null)
        return res;
        
        Arrays.sort(nums); 
        
        
        int len = nums.length;  
        for (int i = 0; i < len; i++) 
        {  
            if (i > 0 && nums[i] == nums[i-1]) 
            continue;  
            find(nums, i+1, len-1, nums[i]); 
        }  
        
        
        return res;
        
    }
    
    public void find(int []nums, int st, int end, int tar)
    {
        while(st < end)
        {
            if(nums[st]+nums[end]+tar == 0)
            {
                List<Integer> ans = new ArrayList<Integer>();  
                ans.add(tar);  
                ans.add(nums[st]);  
                ans.add(nums[end]);  
                res.add(ans);
                while(st < end && nums[st] == nums[st+1]) st++;
                while(st < end && nums[end] == nums[end-1]) end--;
                st++;
                end--;
            }
            
            else if(nums[st] + nums[end] + tar < 0)
                st++;
            else
                end--;
            
        }
        
    }
    
    
}

 

posted @ 2016-10-19 16:27  prog123  阅读(183)  评论(0编辑  收藏  举报