标签:des style c class blog code
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
For example, given candidate set 2,3,6,7
and
target 7
,
A solution set
is: [7]
[2, 2, 3]
这个题目跟第二道题目唯一的区别是重开开始递归下层的位置,不是从i+1开始,而是从i开始,这样就满足了一个元素可以出现无限次的条件。
public class Solution { public ArrayList<ArrayList<Integer>> combinationSum(int[] num, int target) { if(num.length==0) return re; ArrayList<Integer> al = new ArrayList<Integer>(); Arrays.sort(num); FindPath(num,al,target,0,num.length-1); re.addAll(remap.keySet()); return re; } public Map<ArrayList<Integer>,Integer> remap = new HashMap<ArrayList<Integer>,Integer>(); public ArrayList<ArrayList<Integer>> re = new ArrayList<ArrayList<Integer>>(); private void FindPath(int[] num, ArrayList<Integer> al, int target, int start, int end) { if(start>end) return; for(int i=start;i<=end;i++){ al.add(num[i]); int temp = sum(al); if(temp==target){ ArrayList<Integer> at = new ArrayList<Integer>(); for(int j=0;j<al.size();j++){ at.add(al.get(j)); } remap.put(at, 1); al.remove(al.size()-1); return; } if(temp<target){ FindPath(num,al,target,i,end); al.remove(al.size()-1); }else{ al.remove(al.size()-1); return; } } } private int sum(ArrayList<Integer> al) { int re=0; for(int i=0;i<al.size();i++){ re+=al.get(i); } return re; } }
【LeetCode】Combination Sum,布布扣,bubuko.com
标签:des style c class blog code
原文地址:http://www.cnblogs.com/yixianyixian/p/3746525.html