思路 原题链接 与三数之和类似,只要是多加了一层for循环三数之和,需要在for i 的时候,先进行一次去重,然后在寻找到满足条件的sum后,执行L 和 R 的两次去重四数之和,要在for i 和for j 的时候,进行两次去重,然后在寻找到满足条件的sum后,执行L 和 R 的两次去重二刷:处不用判断nums[i] > 0 的情况,因为此处不是要判断sum 为 0 的情况,而是与一个随机的target来比较 class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> ans = new ArrayList<>(); int len = nums.length; if(nums == null || len < 4) return ans; Arrays.sort(nums); for(int i = 0; i < len; i++){ //去重 if(i > 0 && nums[i] == nums[i - 1]) continue; for(int j = i + 1; j < len; j++){ //去重 if(j > i + 1 && nums[j] == nums[j- 1]) continue; int L = j + 1; int R = len - 1; while(L < R){ int sum = nums[i] + nums[j] + nums[L] + nums[R]; if(sum == target){ ans.add(Arrays.asList(nums[i], nums[j], nums[L], nums[R])); while(L < R && nums[L] == nums[L+1]) L++; while(L < R && nums[R] == nums[R-1]) R--; L++; R--; } else if(sum < target) L++; else if(sum > target) R--; } } } return ans; } }