The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)分析:
N sum问题比较特殊,规定了数目,因此用回溯解决不合适。
试不同的组合,将满足题意的加入结果集。
public class Solution { public List<List<Integer>> fourSum(int[] num, int target) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if(num == null || num.length < 4) return res; //HashSet来防止重复 HashSet<List<Integer>> hashSet = new HashSet<List<Integer>>(); Arrays.sort(num); //尝试所有可能组合,过程中保证i<j<k<l即可。 for(int i=0; i<num.length-3; i++) for(int j=i+1; j<num.length-2; j++){ int k=j+1; int l=num.length-1; while(k<l){ int sum = num[i]+num[j]+num[k]+num[l]; if(sum < target) k++; else if(sum > target) l--; else{//sum == target List<Integer> item = new ArrayList<Integer>(); item.add(num[i]); item.add(num[j]); item.add(num[k]); item.add(num[l]); if(!hashSet.contains(item)){ hashSet.add(item); res.add(item); } k++; l--; } } } return res; } }