很多细节需要注意

  1. if(i>=1 && arr[i] == arr[i-1]) {continue;} 这块重复的继续
  2. while(left<right && arr[left] == arr[left-1]) left++;
    while(left<right && arr[right] == arr[right+1]) right--;
    这俩最开始放到了 else 的外面 但是那样会在right+1时判断出错 所以要放到里面
import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        if(num == null && num.length < 3) return res;
        int [] arr = num;
        Arrays.sort(arr);

        for(int i=0;i<arr.length-2;i++){
            int left = i+1;
            int right = arr.length-1;
            if(i>=1 && arr[i] == arr[i-1]) {continue;}

            while(left<right){
                if(arr[i] + arr[left] + arr[right] > 0) right --;
                else if(arr[i] + arr[left] + arr[right] < 0) left ++;
                else{
                    res.add(new ArrayList<>(Arrays.asList(arr[i],arr[left],arr[right])));
                    right--;
                    left++;
                    while(left<right && arr[left] == arr[left-1]) left++;
                    while(left<right && arr[right] == arr[right+1]) right--;
                }
            }
        }
        return res;
    }
}