18 4Sum

来源:互联网 发布:js 布尔值转数字 编辑:程序博客网 时间:2024/05/16 01:50
public class Solution {   public List<List<Integer>> fourSum(int[] nums, int target) { if(nums==null||nums.length<4){ return new ArrayList<List<Integer>>(); }  Arrays.sort(nums); return findKSumInOrderArray(nums, 0, 4, target);  }  public List< List<Integer> > findKSumInOrderArray(int[] nums, int begin, int count, int target){  List< List<Integer> > res = new ArrayList<List<Integer>>(); HashSet<Integer> visited = new HashSet<Integer>();  if(count==2){ int f = begin, r = nums.length-1; while(f < r){ int sum = nums[f] + nums[r]; if((sum==target) && (!visited.contains(nums[f])) ){ List<Integer> tuple = new ArrayList<Integer>(); tuple.add(nums[f]); tuple.add(nums[r]); visited.add(nums[f]); visited.add(nums[r]); res.add(tuple); ++f; --r; }else if(sum < target){ ++f; }else{ --r; } }  }else{  for(int i=begin;i<nums.length;++i){ if(!visited.contains(nums[i])){ visited.add(nums[i]); List<List<Integer>> subset = new ArrayList<List<Integer>>(); subset = findKSumInOrderArray(nums, i+1, count-1, target-nums[i]); if(!subset.isEmpty()){ for(int j=0;j<subset.size();++j){ List<Integer> tmp = subset.get(j); tmp.add(0, nums[i]); }  res.addAll(subset); } } }  } return res; }}

0 0