LeetCode:15. 3Sum


自己的解法,有问题,花费我三个小时

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Sum3 {
    public static void main(String[] args) {
         int[] S = new int[]{-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6};
         List<List<Integer>> list2 = threeSum(S);
         for (int i = 0; i < list2.size(); i++) {
            System.out.println(list2.get(i));
        }
    }

    public static List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> list2 = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                for (int k = j+1; k < nums.length; k++) {
                    if(nums[i]+nums[j]+nums[k]==0){
                        List<Integer> list = new ArrayList<>();
                        list.add(nums[i]);
                        list.add(nums[j]);
                        list.add(nums[k]);
                        list2.add(list);
                    }
                }
            }
        }
         for (int i = list2.size() - 1; i >= 1; i--) {
                for (int j = i-1; j >= 0; j--) {
                    if (list2.get(i).get(0) == list2.get(j).get(0)
                        && list2.get(i).get(1) == list2.get(j).get(1)
                        && list2.get(i).get(2) == list2.get(j).get(2)) {
                        list2.remove(j);
                        i--;
                    }
                }
            }
        return list2;
    }
}

 

 网上的解法

public static List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        if (nums == null || nums.length == 0)
            return list;
        Arrays.sort(nums);
        
        for (int i = 0; i < nums.length; i++) {
            if(i-1>=0&&nums[i]==nums[i-1]) continue;
            int left = i+1;
            int right = nums.length-1;
            while(left<right){
                int sum =nums[i]+nums[left]+nums[right];
                if(sum==0){
                    list.add(Arrays.asList(nums[i],nums[left],nums[right]));  
                    while(left+1<right&&nums[left]==nums[left+1]){  //left左右相同的话,就往右移动
                        left++;
                    }
                    while(left+1<right&&nums[right]==nums[right-1]){
                        right--;
                    }
                    left++;       //排除左右相同的影响,向右移动
                    right--;
                    
                }else if(sum<0){
                    left++;
                }else{
                    right--;
                }
            }

        }
        return list;
    }

 

posted on 2017-12-10 20:32  Michael2397  阅读(150)  评论(0编辑  收藏  举报

导航