18 4Sum
2015-08-30 19:42
323 查看
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; } }
相关文章推荐
- Linux进程与线程的区别和联系
- Ztree简介
- PHP与jquery前后台交互的小程序
- 2012 #5 Gold miner
- Sublime Text 使用方法及其技巧
- 磁盘管理
- Swift入门篇-字符串和字符
- nginx屏蔽ip
- Btrfs
- 2012 #5 History repeat itself
- 使用nginx的proxy_cache做网站缓存
- 程序包管理
- 质数中的质数 SDUT 3305
- Linux学习笔记——Btrfs文件系统的管理及应用
- 别人的确为了别人——价值观
- CentOS虚拟机web服务器实现windows本地实时测试
- 信息论基本公式汇总
- hdu5407CRB and Candies 求逆元
- 什么是大数据?
- 数据结构-线性表