class Solution { //主函数调用 public List<List<Integer>> fourSum(int[] nums, int target) { Arrays.sort(nums); List<List<Integer>> result = kSum(nums,target,4,0); return result; } //k数之和 public List<List<Integer>> kSum(int[] nums, int target, int k, int start){ List<List<Integer>> res = new ArrayList<>(); if(start >= nums.length) return res; //先把两数之和写好 if(k == 2){ int n = nums.length, i = start, j = n - 1; while(i < j){ if(nums[i] + nums[j] == target){ List<Integer> elem = new ArrayList<>(); elem.add(nums[i]); elem.add(nums[j]); res.add(elem); while(i < j && nums[i] == nums[i+1]) ++i; while(j > i && nums[j] == nums[j-1]) --j; i++; j--; }else if(nums[i]+ nums[j] < target) i++; else j--; } return res; } //之后就是递归的过程了 if(k > 2){ for(int i = start; i < nums.length - k + 1; i++){ List<List<Integer>> temp = kSum(nums,target - nums[i], k-1,i+1); if(temp!=null){ for(List<Integer> l : temp){ l.add(0,nums[i]); } res.addAll(temp); } while(i < nums.length -1 && nums[i] == nums[i+1]) ++i; } return res; } return res; } }