Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]
思路,先排序,再二分,要注意要跳过相同的数
public List<List<Integer>> ans; public List<List<Integer>> threeSum(int[] nums) { ans=new ArrayList<List<Integer>>(); Arrays.sort(nums); for(int i=0;i<nums.length;i++){ if(i>0&&nums[i]==nums[i-1]){ continue; //这里要先判断i>0,因为Java会在编译时候检查数组是否越界.不能出现重复元素 } biFind(nums,nums[i],i+1,nums.length-1); } return ans; } public void biFind(int[] nums,int key,int s,int e){ while(s<e){ if(key+nums[s]+nums[e]==0){ List<Integer> bAns=new ArrayList<Integer>(); bAns.add(key); bAns.add(nums[s]); bAns.add(nums[e]); ans.add(bAns); while(s<e&&nums[s]==nums[s+1]) s++; // while(s<e&&nums[e]==nums[e-1]) e--; // s++; e--; } else if(key+nums[s]+nums[e]<0) { s++; } else{ e--; } } }