参考了答案。。。。。。
思路:先对nums[]数组进行排序,i表示第一个数的的索引,i从零遍历到nums.length j表示第二个数的索引,j从i+1开始向后遍历 k表示第三个数的索引,k从nums.length-1向前开始遍历,直到j k相交
注意点:不能重复 所以i j不能取连续相同的数
code:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res=new ArrayList<List<Integer>>();
for(int i=0;i<nums.length;i++){
if(i>0&&nums[i]==nums[i-1])continue;//避免i选到相同的数字
int j=i+1;
int k=nums.length-1;
while(j<k){
while (j > i + 1 && j < nums.length && nums[j] == nums[j - 1]) j++;//避免j选到相同的数字
if (j >= k) break;//j与k相交
if(nums[i]+nums[j]+nums[k]==0){
List<Integer> t=new ArrayList<Integer>();
t.add(nums[i]);
t.add(nums[j]);
t.add(nums[k]);
res.add(t);
j++;
}else if(nums[i]+nums[j]+nums[k]>0){
k--;
}else if(nums[i]+nums[j]+nums[k]<0){
j++;
}
}
}
return res;
}
}
原文链接: https://blog.csdn.net/qq_53568730/article/details/136787501