public class Solution {
public ArrayList<Integer> l;
public ArrayList<ArrayList<Integer>> l1;
public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) {
// Start typing your Java solution below
// DO NOT write main() function
l = new ArrayList<Integer>();
l1 = new ArrayList<ArrayList<Integer>>();
Arrays.sort(candidates);
search(candidates,target,0,l);
return l1;
}
private void search(int[] num,int target,int lev,ArrayList<Integer> l){
//System.out.println("target: "+target+" lev:"+lev);
if(target == 0)l1.add(new ArrayList<Integer>(l));
if(target < num[lev])return;
if(lev==num.length-1){
if(target%num[lev]==0){
for(int i = 0;i<target/num[lev];i++)
l.add(num[lev]);
l1.add(new ArrayList<Integer>(l));
for(int i = 0;i < target/num[lev];i++){
l.remove(l.size()-1);
}
}
}
else{
int count = target/num[lev];
for(int i = 0;i <= count;i++){
search(num,target-i*num[lev],lev+1,l);
l.add(num[lev]);
}
for(int i = 0;i <= count;i++){
l.remove(l.size()-1);
}
}
}
public static void main(String[] args){
int[] a = new int[4];
a[0]=2;a[1]=3;a[2]=6;a[3]=7;
Solution s = new Solution();
System.out.println(s.combinationSum(a,7));
}
}
自己写这个太丑了,还是找个标准的看
public class Solution {
public ArrayList<Integer> cur;
public ArrayList<ArrayList<Integer>> ret;
public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) {
// Start typing your Java solution below
// DO NOT write main() function
ret = new ArrayList<ArrayList<Integer>>();
cur = new ArrayList<Integer>();
Arrays.sort(candidates);
find(candidates,0,cur,target);
return ret;
}
private void find(int[] candidates,int index,ArrayList<Integer> cur,int target){
if(target == 0)
ret.add(new ArrayList<Integer>(cur));
else{
for(int i = index;i < candidates.length;i++){
if(target >= candidates[i]){
cur.add(candidates[i]);
find(candidates,i,cur,target-candidates[i]);
cur.remove(cur.size()-1);
}
}
}
}
}