LeetCode:15. 3Sum
2017-12-10 20:32
423 查看
自己的解法,有问题,花费我三个小时
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; }
相关文章推荐
- (java)Leetcode-15. 3Sum
- leetcode 15. 3Sum 题解
- LeetCode#15. 3Sum
- Leetcode 15. 3Sum(python)
- LeetCode 15. 3Sum
- LeetCode 15. 3Sum -- 数组中某三个元素之和为0,输出这三个元素的值,且这个三元组唯一
- [LeetCode]15. 3Sum【&16. 3Sum Closest】
- leetcode习题解答: 15. 3Sum
- 个人记录-LeetCode 15. 3Sum
- LeetCode 15. 3Sum (Medium)
- 【leetcode】15. 3sum
- leetcode 15. 3Sum
- LeetCode-algorithms 15. 3Sum
- LeetCode 15. 3Sum
- leetcode-15. 3Sum
- leetcode 15. 3Sum
- LeetCode 15. 3Sum (和为零,求三元组)
- leetcode No15. 3Sum
- [LeetCode]15. 3Sum
- leetcode15. 3Sum