给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list=new ArrayList();
Arrays.sort(nums);
int l=nums.length;
if(l<3)
{
return list;
}
if(nums[0]>0)
return list;
for(int i=0;i<l;i++)
{
int m=i+1;
int n=l-1;
int tmp=nums[i];
if(i>0&&nums[i]==nums[i-1])
continue;
while(m<n)
{
if(nums[m]+nums[n]+tmp==0)
{
List<Integer> list2=new ArrayList();
list2.add(tmp);
list2.add(nums[m]);
list2.add(nums[n]);
list.add(list2);
while(m<n&&nums[m]==nums[++m]);
while(m<n&&nums[n]==nums[--n]);
}
else if(nums[m]+nums[n]+tmp>0)
n--;
else
m++;
}
}
return list;
}
}