思路:固定一个,然后用双指针进行遍历即可,记得去重
代码:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans=new ArrayList<>();
if(nums==null||nums.length<3)return ans;
Arrays.sort(nums);
for(int i=0;i<nums.length-2;i++){
if(nums[i]>0) return ans;
if(i>0&&nums[i]==nums[i-1])continue;
int left=i+1,right=nums.length-1;
int target=-nums[i];
while(left<right){
if(nums[left]+nums[right]==target)
{
ans.add(new ArrayList<>(Arrays.asList(nums[i], nums[left], nums[right])));
left++;right--;
while(left<right&&nums[left]==nums[left-1])left++;
while(left<right&&nums[right]==nums[right+1])right--;
}
else if(nums[left]+nums[right]<target)left++;
else right--;
}
}
return ans;
}
}