import java.util.*;
public class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
int size=candidates.length;
List<List<Integer>> res=new ArrayList<List<Integer>>();
List<Integer> temp=new ArrayList<Integer>();
sum(candidates,target,size,0,0,temp,res);
return res;
}
public static void sum(int[] candidates,int target,int size,int sum,int index,List<Integer> temp,List<List<Integer>> res)
{
if(sum==target)
{
//表示找到了目标的数组
//将temp压入res
List<Integer> element=new ArrayList<Integer>();
for(int j=0;j<temp.size();j++)
element.add(temp.get(j));
res.add(element);
}
else if(sum>target)
{
//表示超过了界限,直接退出就好
return ;
}
else
{
//从index开始,每个都入一遍
for(int i=index;i<size;i++)
{
sum+=candidates[i];
temp.add(candidates[i]);
sum(candidates,target,size,sum,i,temp,res);
sum-=candidates[i];
temp.remove(temp.size()-1);
}
}
}
}