题目
分析
题没有什么难度,对于几个数之和的问题,就要进行排序,然后就是注意如何进行排查重复,既然是有序的,那么排查重复,就是看当前的和前面一个是否是相同的字符就可以了,三个两个都是这样处理的。
代码实现
import java.util.*; public class Solution { public static ArrayList<ArrayList<Integer>> threeSum(int[] num) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if (num.length < 3) return res; Arrays.sort(num); for(int i=0;i<num.length-2;i++) { if(i==0||num[i]!=num[i-1]) { ArrayList<ArrayList<Integer>> temp = twoSum(num, i+1, 0 - num[i]); if(temp!=null&&temp.size()!=0) { for(ArrayList<Integer> e:temp) { e.add(num[i]); Collections.sort(e); res.add(e); } } } } return res; } public static ArrayList<ArrayList<Integer>> twoSum(int[] num,int tempindex,int target) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if (num.length < 2) return res; int left=tempindex; int right = num.length - 1; while (left < right) { if (num[left] + num[right] > target) { right--; } else if (num[left] + num[right] < target) { left++; } else { if(left==tempindex||num[left]!=num[left-1]) { ArrayList<Integer> temp=new ArrayList<>(); temp.add(num[left]); temp.add(num[right]); res.add(temp); } right--; left++; } } return res; } }
学习情况
1次