标签:
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: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations. 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] ]
public class Solution { public List<List<Integer>> combinationSum2(int[] candidates, int target) { if(candidates==null || candidates.length==0){ return null; } Arrays.sort(candidates); List<List<Integer>> resList=new ArrayList<List<Integer>>(); List<Integer> item=new ArrayList<Integer>(); boolean[] isVisited = new boolean[candidates.length]; backTracking(candidates, target, 0, item, resList, isVisited); return resList; } public void backTracking(int[] candidates, int target, int start, List<Integer> item, List<List<Integer>> resList, boolean[] isVisited){ if(target<0){ return; } if(target==0){ resList.add(new ArrayList<Integer>(item)); return; } for(int i=start; i<candidates.length; i++){ if(!isVisited[i]){ if(i>0 && candidates[i] == candidates[i-1] && isVisited[i-1]==false){ continue; } item.add(candidates[i]); isVisited[i]=true; backTracking(candidates, target-candidates[i], i+1, item, resList, isVisited); isVisited[i]=false; item.remove(item.size()-1); } } } }
标签:
原文地址:http://www.cnblogs.com/incrediblechangshuo/p/5801327.html