暴力大法好。
import java.util.* ;
public class Solution{
public List<List<Integer>> fourSum(int[] nums, int target){
Arrays.sort(nums) ;
HashMap<Integer, List<Node>> map = new HashMap<Integer, List<Node>>() ;
int n = nums.length ;
for(int i = 0 ; i < n ; i++){
for(int j = i + 1 ; j < n ; j++){
int sum = nums[i] + nums[j] ;
List<Node> g = map.containsKey(sum) ? map.get(sum) : new ArrayList<Node>() ;
Node node = new Node(nums[i], i , nums[j] , j) ;
g.add(node) ;
if(! map.containsKey(sum)) map.put(sum, g) ;
}
}
List<Integer> twosum = new ArrayList<Integer>() ;
for(int e : map.keySet()) twosum.add(e) ;
Collections.sort(twosum) ;
Set<List<Integer>> st = new HashSet<List<Integer>>() ;
for(int suma : twosum){
int sumb = target - suma ;
if(map.containsKey(sumb)){
for(Node A : map.get(suma)){
for(Node B : map.get(sumb)){
if(A.bid < B.aid){
List<Integer> now = new ArrayList<Integer>() ;
now.add(A.a) ; now.add(A.b) ; now.add(B.a) ; now.add(B.b) ;
st.add(now) ;
}
}
}
}
}
List<List<Integer>> result = new ArrayList<List<Integer>>() ;
for(Iterator<List<Integer>> it = st.iterator() ; it.hasNext() ; ){
result.add(it.next()) ;
}
return result ;
}
public static void main(String[] args){
System.out.println(new Solution().fourSum(new int[]{1,0,-1,0,-2,2}, 0));
}
}
class Node{
public int a , aid , b , bid ;
public Node(int a , int aid , int b , int bid){
this.a = a ;
this.aid = aid ;
this.b = b ;
this.bid = bid ;
}
public boolean equals(Node other) {
return a == other.a && b == other.b ;
}
}