一、题目
二、代码
class Solution
{
//双指针
public List<List<Integer>> threeSum(int[] nums)
{
List<List<Integer>> re = new LinkedList<>();
Arrays.sort(nums);
int i;
int left;
int right;
int length = nums.length;
// for(i=0;i<length;i++)
// {
// System.out.println(" "+nums[i]);
// }
for(i=0;i<length;i++)
{
if(nums[i]>0) continue;
//外部没必要相同
if(i>0 && nums[i] == nums[i-1]) continue;
left = i+1;
right = length-1;
// System.out.println(" 外部 left "+left);
// System.out.println(" 外部 right "+right);
while( left < right )
{
// System.out.println(" 内部 left "+left);
// System.out.println(" 内部 right "+right);
if(nums[i]+nums[left]+nums[right]==0)
{
// System.out.println(" 满足条件 添加");
while(left+1<right&&nums[left]==nums[left+1]) left++;
while(right-1>left&&nums[right]==nums[right-1]) right--;
re.add(Arrays.asList(nums[i],nums[left],nums[right]));
left++;
right--;
}
else if(nums[i]+nums[left]+nums[right] <0)
{
left++;
}
else
{
right--;
}
}
}
return re;
}
}