Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.
Note:
For example, given candidate set 10,1,2,7,6,1,5
and target 8
,
A solution set is:
[1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
can not pass big test set.
public class Solution { HashSet<ArrayList<Integer>> unique = new HashSet<ArrayList<Integer>>(); public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) { // Start typing your Java solution below // DO NOT write main() function unique.clear(); ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); //check input if(num==null || num.length==0 ) return res; ArrayList<Integer> temp = new ArrayList<Integer>(); Arrays.sort( num); comRec(num, res, temp, target, 0, 0); return res; } private void comRec(int[] num, ArrayList<ArrayList<Integer>> res, ArrayList<Integer> temp, int target, int partSum, int level){ if(level > num.length) return; if(partSum == target ) { ArrayList<Integer> t = new ArrayList<Integer>(temp); if(!unique.contains(t)) { res.add(t); unique.add(t); } return; } for(int i=level; i<num.length; i++) { temp.add( num[i] ); comRec(num, res, temp, target, partSum+num[i], i+1); temp.remove( temp.size()-1); } } }