描述
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: All numbers (including target) will be positive integers. Elements in a combination (a1, a2, ... , ak) must be in non-descending order. (ie, a1 <= a2 <= ... <= ak). The
solution set must not contain duplicate combinations. For example, given candidate
set 2,3,6,7 and target 7, A solution set is:
[7]
[2, 2, 3]
代码
package com.lilei.spring_boot_db.boot.pack1115; import java.util.ArrayList; import java.util.List; public class combination_sum { public static void main(String[] args) { int[] array = new int[]{2,3,6,7}; com_sum(array,0,0,8,new ArrayList<Integer>()); } static void com_sum(int[] array,int p,int value,int target,List<Integer> list){ if (value + array[p] < target){ List<Integer> dest1 = new ArrayList<Integer>(); copyList(dest1,list); dest1.add(array[p]); com_sum(array,p,value+ array[p],target,dest1); if (p+1 < array.length) { List<Integer> dest2 = new ArrayList<Integer>(); copyList(dest2,list); com_sum(array, p + 1, value, target,dest2); } }else if (value + array[p] == target){ list.add(array[p]); for(int v:list) System.out.print(v+","); System.out.println(); } } static void copyList(List<Integer> dest,List<Integer> src){ for(int v:src) dest.add(v); } }